我使用iframe
创建了一个简单的HTML页面,其src
属性引用包含它的页面--换句话说,是一个自引用iframe。
此.html
<html>
<head></head>
<body>
<iframe src="this.html"></iframe>
</body>
</html>
为什么这不是无限循环和崩溃我的浏览器?还有,为什么IE浏览器不会崩溃呢?
(Note:这是团队讨论使用iframe解决问题的优点和缺点的结果。你知道,就像“镜子中的镜子”一样。)
我使用iframe
创建了一个简单的HTML页面,其src
属性引用包含它的页面--换句话说,是一个自引用iframe。
此.html
<html>
<head></head>
<body>
<iframe src="this.html"></iframe>
</body>
</html>
为什么这不是无限循环和崩溃我的浏览器?还有,为什么IE浏览器不会崩溃呢?
(Note:这是团队讨论使用iframe解决问题的优点和缺点的结果。你知道,就像“镜子中的镜子”一样。)
3条答案
按热度按时间dgtucam11#
W3C在1997年解决了这个问题,解释了应该如何在"Implementing HTML Frames"中实现帧:
任何试图将其祖先使用的URL指定为SRC的帧都被视为根本没有SRC URL(基本上是空白帧)。
Iframe递归错误/攻击历史记录
正如kingdago发现并在上面的评论中提到的,一个错过了实现这一保护的浏览器是Mozilla在 * 1999 *。
这是一个奇偶校验错误(也是一个可能的麻烦来源),因为MSIE5对这类页面没有问题。
我决定对此进行深入研究,结果发现在 * 2004 * 发生了again。然而,这次涉及到JavaScript:
This is the code, what causes it: directly followed by a script with this in it: frames.productcatalog.location.replace(frames.productcatalog.location + location.hash);
...
实际结果:父窗口递归加载到iframe中,有时会导致崩溃。
预期结果:就像在Internet Explorer中一样显示它。
然后again在 * 2008 * 与Firefox 2(这也涉及JavaScript)。
以及 * 2009 * 中的again。这里有趣的部分是这个bug仍然开放,并且这个附件:
https://bugzilla.mozilla.org/attachment.cgi?id=414035
(你能克制一下你的好奇心吗?)仍然会让你的Firefox崩溃/冻结(我刚刚测试了它,我几乎让整个Ubuntu崩溃)。在Chrome中,它只会无限期加载(可能是因为每个标签都存在于一个单独的进程中)。至于其他浏览器:
70gysomp2#
我想补充一点东西到 “还有,为什么不甚至IE崩溃在这?" 问题的一部分。IE不会让我们失望...
如果你在嵌套的iFrame的src中添加一个简单的迭代号作为查询字符串,Firefox和其他程序在达到一定的迭代深度后就会停止。IE --我们在IE版本10中测试过--只是崩溃:)
此.php文件
mznpcxlj3#
IE 6.0在没有脚本的情况下可能会崩溃:
我不知道为什么这不触发循环检测,也不知道它是否改变了。
编辑:了解原因。因为它是本地文件,
?
之后的URL被忽略,所以只有this.html
被标记为已访问,而不是this.html?c=9
。