【问题标题】:iFrame isolationiFrame 隔离
【发布时间】:2011-02-09 23:27:56
【问题描述】:

只是一个想法,但在DIV 上使用IFRAME 本质上会使该元素与窗口隔离,这样在IFRAME 中运行的慢速脚本不会影响其他框架/窗口?

【问题讨论】:

    标签: javascript iframe isolation


    【解决方案1】:

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

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

    提供一个简单的例子:

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

    来源:
    我也尝试过这样的多线程。艰难地学习了=)

    【讨论】:

    • 哈哈很好的答案,非常感谢。救了我走上死胡同。
    • 正确答案,不过要说一句; “但是,仍然可以通过 window.parent 访问父窗口”仅当父窗口和子窗口(iframe)都在同一个域上时才是正确的。如果不是,由于“同源策略”,您确实可以将 iframe 视为沙盒环境。
    【解决方案2】:

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

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

    猜你喜欢
    • 2017-01-15
    • 2017-10-18
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多