iFrame隔离

时间:2010-04-20 04:11:16

标签: javascript iframe isolation

只是一个想法,但是使用IFRAME而不是DIV基本上会使该元素与窗口隔离,导致IFRAME中运行速度慢的脚本不会影响其他框架/窗户?

2 个答案:

答案 0 :(得分:8)

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

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

提供一个简单的例子:

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

来源:
我也尝试过像这样的多线程。学到了很多东西=)

答案 1 :(得分:2)

在新版浏览器中,您可以使用沙盒属性将iframe与页面的其余部分隔离开来

http://www.w3schools.com/tags/att_iframe_sandbox.asp