Mr. Burns: Funktion in HTML Objekt aufrufen

Hallo,

ich habe eine Hauptseite (haupt.html), in die ich ein HTML-Objekt einbette:

haupt.html:

<html>
<script language="JavaScript">
<!--
  var VAR1 = "";

function Fkt1(P1)
  {
    alert(P1);
  }

alert(VAR1);
// -->
</script>
<body>
...
<object name="N1" id="O1" data="objekt.html" type="text/html" width="100" height="50" standby="Loading..."></object>
...
</body>
</html>

objekt.html:

<html>
<script language="JavaScript">
<!--
  // Hier brauche ich etwas wie:
  haupt.html-->Fkt1("Hallo");
// -->
</script>
<body>
...
</body>
</html>

Nun möchte ich von der objekt.html die Funktion Fkt1() in haupt.html aufrufen.
Oder aus der objekt.html in der haupt.html die Variable VAR1 ändern.

Ich weiß aber nicht, wie ich aus der objekt.html auf JavaScript der haupt.html zugreifen kann!

Hat jemand ne Idee?
Sollte in IE ind FF funktionieren.

Auch umgekehrt wäre interessant, wie kann ich aus der haupt.html auf JavaScript der objekt.html zugreifen?

alle Versuche mit document.getElementById('O1')... usw.
oder document.parentWindow.Fkt1("Hallo")

führten zu JavaScript Fehlermedungen (Objejkt unterstützt Methode nicht etc.)

Danke für jegliche Hilfe!

  1. Hallo,

    <object name="N1" id="O1" data="objekt.html" type="text/html" width="100" height="50" standby="Loading..."></object>

    das Element <objekt> ist nicht dazu geschaffenworden html-Dokumente in andere einzubinden. Dafür gibt es Frames.

    Definierte Funktionen einer Browserinstanz lassen sich nicht nur direkt über den Namen der Funktion aufrufen, sondern auch über window.function_name(). Mit dem Wissen aus http://aktuell.de.selfhtml.org/tippstricks/javascript/fensterzugriff/index.htm kannst Du dann auf Funktionen außerhalb eines Dokuments innerhalb eines Framesets zugreifen.

    Gruß aus Berlin!
    eddi

    1. Hallo,

      <object name="N1" id="O1" data="objekt.html" type="text/html" width="100" height="50" standby="Loading..."></object>

      das Element <objekt> ist nicht dazu geschaffenworden html-Dokumente in andere einzubinden. Dafür gibt es Frames.

      Das ist falsch, object ist das Strict-Pendant für iframe. Mit object kann man alle möglichen Ressourcen einbinden, selbstverständlich auch HTML-Dokumente.

      Mathias

      1. Hallo Mathias,

        *oha* Danke!

        Gruß aus Berlin!
        eddi

  2. Hallo,

    <object name="N1" id="O1" data="objekt.html" type="text/html" width="100" height="50" standby="Loading..."></object>

    Nun möchte ich von der objekt.html die Funktion Fkt1() in haupt.html aufrufen.
    Oder aus der objekt.html in der haupt.html die Variable VAR1 ändern.

    parent.funktion();
    parent.variable = "wert";

    Im MSIE geht das aber nicht. Wohl prinzipiell. Ich wüsste zumindest keine Möglichkeit. parent verweist genauso wie top auf das eigene window-Objekt.

    Auch umgekehrt wäre interessant, wie kann ich aus der haupt.html auf JavaScript der objekt.html zugreifen?

    Das wird schon schwieriger.

    Vom object-Elementknoten auf das window-Objekt des Dokuments im object zuzugreifen, ist kompliziert. DOM HTML sieht die Eigenschaft contentDocument vor, darüber bekommt man das document-Objekt zu fassen, aber nicht das window-Objekt. Im MSIE gibt es stattdessen die Eigenschaft object. Die Brücke vom document-Objekt zum zugehörigen window-Objekt ist die Eigenschaft defaultView, das kann der MSIE aber nicht. Dafür kennt der parentWindow.

    Das macht in der Summe:

    <p><object type="text/html" data="objekt.html" id="obj" width="100" height="100"></object></p>

    var obj = document.getElementById("obj");  
    var objwindow;  
    if (obj.contentDocument && obj.contentDocument.defaultView) {  
     objwindow = obj.contentDocument.defaultView;  
    } else if (obj.object && obj.object.parentWindow) {  
     objwindow = obj.object.parentWindow;  
    }  
    if (objwindow) {  
     objwindow.funktion();  
     objwindow.variable = "wert";  
    }
    

    Aber vielleicht solltest du lieber einen gewöhnlichen iframe und dann window.frame.framename bzw. parent verwenden, damit gelingt der Zugriff vom Dokument im Objekt auf das darüberliegende Dokument auch im IE.

    Mathias

    1. Danke,

      ja mit iframes hab ich es jetzt gemacht und es klappt.
      Aber iframes sollen doch nicht mehr lange W3C konform sein, oder?

      1. Hallo,

        ja mit iframes hab ich es jetzt gemacht und es klappt.
        Aber iframes sollen doch nicht mehr lange W3C konform sein, oder?

        Die nächste HTML-Version ist XHTML 2. XHTML 2 steht momentan in den Sternen. Fest steht, dass XHTML 2 in keiner Hinsicht abwärtskompatibel sein wird - man wird, wenn man denn irgendwann in vielen Jahren auf XHTML 2 umstellen will, sowieso das gesamte Dokument überarbeiten müssen. Und ja, iframe wird es dann voraussichtlich nicht mehr geben. Ein Element namens object mit ähnlicher Funktion wird es weiterhin geben, aber unter völlig anderen Bedingungen.
        Daher ist es für die Gegenwart ziemlich irrelevant, was mit XHTML 2 kommen wird. Und selbst wenn: HTML 4.01 und XHTML 1.0 werden weiterhin existieren und deren Benutzung wird nach wie vor W3C-konform sein.

        Mathias