10 Stimmen

Wie kann ich mit JavaScript das Fensterobjekt ermitteln, zu dem ein HTML-Knoten gehört?

Wegen mehrerer Iframes, XUL-Browser-Elemente usw. habe ich eine Reihe von Fensterobjekten in meiner XULRunner-Anwendung. Ich suche nach dem besten Weg, das Fensterobjekt, zu dem ein bestimmter Knoten gehört, mit JavaScript zu finden.

Um genauer zu sein, muss ich bei einem Knoten x das spezifische Fensterobjekt finden, das x enthält.

14voto

Marco Demaio Punkte 32210

+1 zu Ihrer Frage, das war genau das, wonach ich gesucht habe, und danke für den Hinweis, den Sie mir direkt gegeben haben, indem Sie selbst geantwortet haben.

Ich habe ein bisschen gegoogelt und laut http://www.quirksmode.org/dom/w3c_html.html Browserübergreifende Tabellen Ich denke, die richtige Antwort ist:

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;
}

Oder vielleicht noch besser:

return html_node.ownerDocument.defaultView || html_node.ownerDocument.parentWindow;

Bitte teilen Sie mir Ihre Meinung mit.

3voto

keparo Punkte 32084

Sie können Folgendes verwenden selbst . self ist ein Verweis auf das aktuelle Dokument.

Innerhalb des 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>

Traversieren mehrerer Fensterobjekte:

Innerhalb des Browser-Objektmodells wird das primäre Fensterobjekt als top . Andere globale Objekte sind in einer Baumstruktur angeordnet, die von oben nach unten verläuft. Mit einem Verweis auf top können Sie zu den anderen globalen Objekten in der Baumstruktur navigieren, indem Sie deren Namen und Beziehungen ähnlich wie bei Ihnen das DOM durchlaufen .

Wenn Sie mehrere Fensterobjekte haben, wie im Fall eines iframe (oder bei Framesets der alten Schule), hat der Frame eine Namensattribut . Angesichts der Position des Objekts in Bezug auf das oberste Fensterobjekt können Sie den Namen des untergeordneten Objekts verwenden, um auf das Objekt zuzugreifen.

<iframe src ="/default.html" name="advertisement"></iframe>

und dann aus dem Kontext des oberen Fensters:

self.advertisement

3voto

Joel Anair Punkte 13536

Ich habe die Kombination von Eigenschaften gefunden, die ich gesucht habe:

node.ownerDocument.defaultView

Dies gibt das Fensterobjekt zurück, zu dem der Knoten gehört. Beachten Sie, dass dies im IE nicht funktioniert.

0 Stimmen

Node.ownerDocument.defaultView ist die Standardmethode dafür. Das funktioniert auch auf Webseiten in Safari und Opera.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X