8

我在 jsBin 中有以下代码:http: //jsbin.com/iRoROvu/1/edit

它基本上在 iframe 中有一个锚点。如果您单击该链接,您将在 Chrome 中看到没有任何反应,但在 Firefox 中它只是空白。

这是 jsFiddle 中的相同代码:http: //jsfiddle.net/LbNwd/

JavaScript:

 var previewFrame = document.getElementById('preview');
    var preview =  previewFrame.contentDocument ||     previewFrame.contentWindow.document;     
    preview.open();
    preview.write("Hello World!<br/><a href='#'>Click me!</a>");
    preview.close();

HTML:

<iframe id="preview"></iframe>

在这种情况下,如果您使用 Firefox,它会在现有 iframe 中创建另一个 iframe……并继续这样做……就像“Inception”一样。但是相同的代码在 Chrome 中运行良好。

谁能告诉我为什么?

4

3 回答 3

1

是的。你应该href='javascript:void(0);'改用href='#'

或者

你可以<a href='#' target="preview">Click me!</a>改用。

我认为添加target="preview"也应该解决您的问题。

只需尝试一次,让我们知道它是否有效。

于 2013-10-25T14:45:14.117 回答
0

实际上,这可能很愚蠢,但我不喜欢井号标签,这就是我javascript://尽可能使用的原因,但对于你的情况,我确信如果你用它替换你的href值或者href='javasctipt:void(0)'它会解决这个问题,问题是,我认为,浏览器将哈希标签视为要浏览的新 url,这就是我不使用它的原因,我希望它对你有用

于 2013-10-15T18:53:50.053 回答
0

为什么?这很有趣,但“初始”行为与 iFrame 中的“页面顶部”对 Firefox 的含义有关。如果你使用#top你会得到同样的结果

理想情况下,您应该使用 Labib 的回答中提到的 href='javascript:void(0)' ,但是由于您提到它超出了您的控制范围,因此您似乎需要破解。

真正丑陋的方法是搜索正在打印的输出href="#"并替换它。

但是在这种情况下,我认为最好检测到事情何时变坏并在那时采取一些措施,如下所示:

if (frameElement && frameElement.id === 'preview') {       
    // Think of something clever here, like
    parent.location = parent.location;
}

这是在行动:http: //jsfiddle.net/ze3CR/show

于 2013-10-15T22:16:28.143 回答