Como posso obter o objeto de janela que um nó HTML pertence usando JavaScript?
-
03-07-2019 - |
Pergunta
Por causa de vários iframes, elementos do navegador XUL, e assim por diante, eu tenho um número de objetos da janela no meu aplicativo XULRunner. Eu estou procurando a melhor maneira de encontrar o objeto janela que um nó especificado pertence ao uso de JavaScript.
Assim, para ser mais específico, dado nó x, eu preciso encontrar o objeto janela específica que contém x.
Solução
+1 à sua pergunta, que era exatamente o que eu estava procurando e obrigado pela dica dada diretamente, respondendo a si mesmo.
Eu pesquisei um pouco e de acordo com a http://www.quirksmode.org/dom/w3c_html .html cross-browsers tabelas acho que a resposta certa é:
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;
}
Ou talvez ainda melhor:
return html_node.ownerDocument.defaultView || html_node.ownerDocument.parentWindow;
Plz deixe-me saber seus pensamentos.
Outras dicas
I encontrada a combinação de propriedades que foi depois:
node.ownerDocument.defaultView
que retorna o objeto janela que o nó pertence. Note que isso não funciona no IE.
Você pode querer usar auto . eu é uma referência para o documento atual.
De dentro do 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>
Atravessando Janela vários objetos:
Dentro do modelo de objeto de navegador, o objeto janela principal é referido como top . Outros objetos globais estão dispostos em uma estrutura de árvore que nasce de cima. Com uma referência a top , você pode navegar para os outros objetos globais na árvore usando seus nomes e relacionamentos , muito da mesma maneira como você atravessar o DOM .
Quando você tem vários objetos de janela, como você faz no caso de um iframe (de com conjuntos de quadros da velha escola), o quadro tem um atributo de nome . Dada a posição relativa objetos para o objeto janela superior, você pode usar o nome da criança para acessar o objeto.
<iframe src ="/default.html" name="advertisement"></iframe>
e, em seguida, a partir do contexto da janela do topo:
self.advertisement