2010-04-20 361 views
2

只是一个想法,但会使用IFRAME而不是DIV本质上使该元素与窗口隔离,以减缓在IFRAME中运行的脚本不会影响其他框架/窗口的方式?iFrame隔离

回答

7

是的,对于第一部分,iframe将“排序”将窗口与iframe中的脚本隔离。但是,父窗口仍然可以通过window.parent访问。

对于第二部分:不,它不会使iframe中的脚本太慢,不会影响其他框架/窗口。您的主窗口对象及其子节点都运行在同一个线程中。 JavaScript是单线程的[在这种情况下忽略webworkers,无论如何你都不能传递dom元素],所以你可以访问父窗口/子iframe的窗口对象的唯一原因是因为它们在同一个线程中。

为了提供一个简单的例子:

  • 创建一个名为main.html中
  • 在该网页页面,有一个IFRAME src="iframe.html"
  • 旁边的iframe,有你想要的任何文本的按钮,我不在乎。
  • In iframe.html,window.onload = function(){ while(1){} };
  • 访问iframe.html。您会注意到,当您将鼠标光标放在按钮上时,它不会响应/重绘。这是因为浏览器被冻结。

来源:
我也尝试过这样的多线程。深知这一点=)

+0

哈哈伟大的回答,非常感谢隔离。我让我走向死路一条。 – Louis 2010-04-20 06:42:58

+2

正确答案,尽管一个小小的评论; “但是,父窗口仍然可以通过window.parent访问”仅当父级和子级(iframe)在同一个域上时才是正确的。如果它们不是,那么由于“相同来源策略”,您确实可以将iframe视为沙箱环境。 – futtta 2010-04-20 11:46:17