iframe
s(和frame
s)是他們自己的窗口,即使在iframe
的情況下,它們看起來像是主文檔窗口的一部分。所以是的,要引用主文檔的窗口,他們會使用parent
(或window.parent
,如果您想冗長但明確),因爲它們是單獨的對象。這是部分必要的,因爲document
中的很多內容最終會作爲包含window
的屬性。
如果您仔細考慮它,那麼這是有道理的:iframe
的目的是在頁面中嵌入獨立來源的內容。如果主頁和其上的iframe
(s)共享一個單一的window
對象,則它們將共享全局上下文,並且很可能相互衝突。
無償live example:
家長HTML:
<p>I'm the parent window</p>
<iframe width="500" height="500" src="http://jsbin.com/iyogir"></iframe>
家長的JavaScript:
function foo() {
display("<code>foo</code> called!");
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
孩子的HTML:
<p>I'm in the frame</p>
<input type='button' id='theButton' value='Click Me'>
孩子的JavaScr IPT:
window.onload = function() {
document.getElementById('theButton').onclick = function() {
var p = window.parent;
if (!p) {
display("Can't find parent window");
}
else if (typeof p.foo !== "function") {
display("Found parent window, but can't find <code>foo</code> function on it");
}
else {
display("Calling parent window's <code>foo</code> function.");
p.foo();
}
};
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
};
我必須使用window.parent訪問容器或parent.window或兩者都有效嗎? – testndtv
@hmthr我推薦'window.window.parent.window.window' ...':)' –
@hmthr:在瀏覽器的JavaScript中,窗口對象是所有全局變量的容器。實際上,'window'符號本身就是窗口對象的一個屬性(指向對象)。 'parent'也是窗口對象的一個屬性,所以'window.parent'是多餘的,你可以說'parent'。但是,清楚你在做什麼是很有用的。 'parent.window'也可以工作,但是以一種令人誤解的方式:'parent'部分爲您提供了父窗口的窗口對象,不需要繼續;然後你正在查看它的'window'道具(它指向它)。 –