2014-05-08 52 views
3

我有兩個iframe。這些內聯框架通過postMessage進行通信。兩個iframe正在通信:SecurityError

從一個iframe,如果我做了以下,它不起作用。

// Broadcast to all iframes. 
parent.frames.forEach(function (frame) { 
    frame.postMessage(data, 'http://localhost:4000'); 
}); 

錯誤

Uncaught SecurityError: Blocked a frame with origin "http://..." from accessing a frame with origin "http://...". Protocols, domains, and ports must match.

但是,如果我這樣做,它工作得很好。沒有錯誤信息。爲什麼?

for (var i = 0 ; i < parent.frames.length ; ++i) { 
    parent.frames[i].postMessage(data, 'http://localhost:4000'); 
} 
+2

的這裏的問題看起來像它可以被讀爲「爲什麼'parent.frames.forEach'給我一個_SecurityError_,當我可以迭代他們在'for'?」 –

回答

2

這裏的問題看起來可以理解爲

Why does parent.frames.forEach give a SecurityError when I can iterate over them in a for ?

這是因爲parent.frames不是陣列窗口實例,因此,當您嘗試訪問.forEach,它正在尋找一個不同的窗口屬性,安全性阻止訪問。

window.frames的MDN頁面(parent窗口

Returns the window itself, which is an array-like object, listing the direct sub-frames of the current window.

如果你想使用.forEach,把它從(一referencabe)Array的原型

Array.prototype.forEach.call(parent.frames, callback);