单击iFrame中的锚点在Firefox和Chrome中的行为有所不同

时间:2013-10-15 18:38:05

标签: javascript html iframe

我在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中运行良好。

谁能告诉我为什么?

3 个答案:

答案 0 :(得分:1)

是。您应该使用href='javascript:void(0);'代替href='#'

OR

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

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

只需尝试一次&amp;让我们知道它的工作与否。

答案 1 :(得分:0)

实际上,这可能是愚蠢的,但我不喜欢哈希标记,这就是我尽可能使用javascript://的原因,但对于您的情况,我确信您是否更换了href值或者href='javasctipt:void(0)'它将解决这个问题,问题是,我认为,浏览器将哈希标记视为要浏览的新网址,这就是为什么我不使用它,我希望它适合你

答案 2 :(得分:0)

为什么呢?这很有趣,但“初始”行为与“页面顶部”对iFrame中的Firefox意味着什么有关。如果您使用#top,则会获得same results

理想情况下,你应该使用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