いくつかの iframe、XUL ブラウザー要素などがあるため、XULRunner アプリケーションには多数のウィンドウ オブジェクトがあります。JavaScript を使用して、指定されたノードが属するウィンドウ オブジェクトを見つける最良の方法を探しています。
より具体的に言うと、ノード x が与えられた場合、x を含む特定のウィンドウ オブジェクトを見つける必要があります。
いくつかの iframe、XUL ブラウザー要素などがあるため、XULRunner アプリケーションには多数のウィンドウ オブジェクトがあります。JavaScript を使用して、指定されたノードが属するウィンドウ オブジェクトを見つける最良の方法を探しています。
より具体的に言うと、ノード x が与えられた場合、x を含む特定のウィンドウ オブジェクトを見つける必要があります。
あなたの質問に+1、それはまさに私が探していたものであり、あなた自身に答えることによって直接与えられたヒントに感謝します。
私は少しグーグルで検索しました。http: //www.quirksmode.org/dom/w3c_html.htmlクロスブラウザの表によると、正しい答えは次のとおりです。
function GetOwnerWindow(html_node)
{
/*
ownerDocument is cross-browser,
but defaultView works on all browsers except Opera/IE that use parentWinow
*/
return (html_node.ownerDocument.defaultView) ?
html_node.ownerDocument.defaultView :
html_node.ownerDocument.parentWindow;
}
または多分さらに良い:
return html_node.ownerDocument.defaultView || html_node.ownerDocument.parentWindow;
Plzはあなたの考えを教えてくれました。
私が求めていたプロパティの組み合わせを見つけました:
node.ownerDocument.defaultView
これは、ノードが属するウィンドウ オブジェクトを返します。これは IE では機能しないことに注意してください。
selfを使用することもできます。self は、現在のドキュメントへの参照です。
iframe 内から:
<body>
<div id="example">Example!</div>
<script type="text/javascript">
window.onload = function () {
var exampleNode = document.getElementById('example');
exampleNode.bar = function () {
// The highest window object:
top;
// The parent node:
self;
// The parent node ( except in IE );
this.ownerDocument.defaultView;
};
};
</script>
</body>
複数のウィンドウ オブジェクトのトラバース:
ブラウザー オブジェクト モデル内では、プライマリ ウィンドウ オブジェクトはtopと呼ばれます。他のグローバル オブジェクトは、上から始まるツリー構造に配置されます。topへの参照を使用すると、DOMをトラバースするのとほぼ同じ方法で、名前と関係を使用してツリー内の他のグローバル オブジェクトに移動できます。
(古い学校のフレームセットの) iframe の場合のように、複数のウィンドウ オブジェクトがある場合、フレームにはname 属性があります。上部のウィンドウ オブジェクトに対するオブジェクトの位置を指定すると、子の名前を使用してオブジェクトにアクセスできます。
<iframe src ="/default.html" name="advertisement"></iframe>
そして、トップウィンドウのコンテキストから:
self.advertisement