2010-04-20 363 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