在 Firefox 和 Chrome 中,单击 iFrame 中的锚点的行为会有所不同
Clicking an anchor inside an iFrame behaves differently in Firefox and Chrome
我在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...并继续这样做...比如《盗梦空间》。但是相同的代码在Chrome中工作正常。
谁能告诉我为什么?
是的。您应该使用href='javascript:void(0);'
而不是href='#'
或
您可以改用<a href='#' target="preview">Click me!</a>
。
我认为添加target="preview"
也应该解决您的问题。
只需尝试一次,让我们知道它是否有效。
实际上,这可能很愚蠢,但我不喜欢哈希标签,这就是为什么我尽可能使用 javascript://
,但对于您的情况,我确信如果您将href
值替换为该值或href='javasctipt:void(0)'
它将解决这种情况,我认为问题是浏览器将哈希标签视为要浏览的新 URL, 这就是为什么我不使用它,我希望它对你有用
为什么?这很有趣,但"初始"行为与iFrame中的"页面顶部"对Firefox意味着什么有关。 如果您使用#top
则会得到相同的结果。
理想情况下,你应该使用 href='javascript:void(0)' 正如 Labib 的答案中提到的,但既然你提到它超出了你的控制范围,那么你似乎需要一个黑客。
真正丑陋的方法是搜索正在打印的输出以获取href="#"
并替换它。
但是在这种情况下,我认为最好检测事情何时变坏并在那时采取一些措施,例如:
if (frameElement && frameElement.id === 'preview') {
// Think of something clever here, like
parent.location = parent.location;
}
这是在行动:http://jsfiddle.net/ze3CR/show
- 防止Iframe窗体在新窗口中打开
- 将样式表插入iframe
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 使用jQuery从原始页面内容创建iframe
- Highslide(iframe的侦听器)
- iframe正在添加标签,需要删除它们
- 通过javascript/html访问twitter共享iframe
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 如何使用Angular动态添加iframe-src
- 由于iframe导致的问题
- 正在从页面中删除iframe
- 检测iframe是否跨域的愚蠢方法
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 如何操作iframe之外的元素
- 如何使用javascript/jquery获取iframe的URL的锚点属性
- 对特定的iframe使用javascript书签
- node-webkit-从父窗口捕获iframe鼠标事件
- 重定向iFrame中的父URL
- 如何关闭html中的iframe弹出窗口
- 在 Firefox 和 Chrome 中,单击 iFrame 中的锚点的行为会有所不同