Klaus1: Javascript-Funktion innerhalb eines geladenen Object-Tags aufrufen?

Hallo,

innerhalb einer HTML-Seite wird eine weitere Seite mittels Object-Tags eingebunden.

<object id="contentobj" type="text/html" data="grafik.php?id=9" width="100%" height="100%"></object>

Wie kann ich jetzt eine Javascript-Funktion aufrufen, die sich innerhalb des Object-Tags befindet?

Ich habe es probiert mit:

window.contentobj.meineFunktion();

und auch mit

obj = document.getElementById("contentobj");
obj.meineFunktion();

In beiden Fällen bekomme ich die Fehlermeldung, dass die Funktion unbekannt sei.

Wie kann ich die Funktion korrekt aufrufen?

LG Klaus

  1. Tach!

    Wie kann ich jetzt eine Javascript-Funktion aufrufen, die sich innerhalb des Object-Tags befindet?

    Kurze Recherche im Internet ergab, dass ein geladenes Dokument sich nicht direkt im Object-Element wiederfindet, sondern es die Eigenschaft contentWindow gibt, die auf das geladene Dokument verweist.

    dedlfix.

    1. Hallo dedlfix,

      kurzes Nachlesen der Recherche ergab die Antwort "This didn't work" vom OP dort.

      Kurzes ausprobieren im eigenen Browser (Chrome 73) ergab: Funktioniert doch. Wenn man es richtig macht.

      Problem scheint zu sein, dass sämtliche synchronen Scripte aus dem ins <object> geladenen HTML erst dann starten, wenn die Scripte des einbettenden HTML abgearbeitet sind. async/defer Scripte habe ich nicht betrachtet. Meine Prüfung ergab diese Reihenfolge, allerdings habe ich das nur mit Chrome 73 gemacht. Andere Browser oder andere Chrome-Versionen haben möglicherweise ein anderes Timing.

      • Head-Scripte des Main-HTML
      • Body-Scripte des Main-HTML
      • DOMContentLoaded Event des Main-DOM feuert
      • Head-Scripte des Object-HTML
      • Body-Scripte des Object-HTML
      • DOMContentLoaded Event des Object-DOM feuert - aber nur für Registrierungen, die aus einem Script des Object-DOM gemacht wurden. Eine DOMContentLoaded Registrierung im Main-HTML auf das contentDocument wird nicht beachtet.
      • load Event des contentWindow feuert
      • load Event des Main-Window feuert.

      Und darum muss man, bevor man auf JavaScript-Objekte des contentWindow zugreift, abwarten, bis dessen load Event gefeuert wurde. Vorher sind sie nicht verfügbar.

      Rolf

      --
      sumpsi - posui - clusi
      1. Tach!

        kurzes Nachlesen der Recherche ergab die Antwort "This didn't work" vom OP dort.

        Bei der Antwort mit der contentWindow-Eigenschaft stand kein Kommentar. Und diese Eigenschaft wurde auch im MDN gelistet.

        Und darum muss man, bevor man auf JavaScript-Objekte des contentWindow zugreift, abwarten, bis dessen load Event gefeuert wurde. Vorher sind sie nicht verfügbar.

        Logisch. Wie immer, wenn was geladen werden muss.

        dedlfix.

    2. Kurze Recherche im Internet ergab, dass ein geladenes Dokument sich nicht direkt im Object-Element wiederfindet, sondern es die Eigenschaft contentWindow gibt, die auf das geladene Dokument verweist.

      Ich habe es zunächst mit contentDocument probiert, was zum selben Fehler geführt hat: unbekannte Funktion.

      Dann mit contentWindow. Das Ergab im Debugger:

      Fehler beim Laden der folgenden Adresse: Could not load the source for blob:https://meineseite.de/d96b7a1e-e086-49b7-8e88-c65090ff2bad.
      [Exception... "Failed to open input source 'blob:https://meineseite.de/d96b7a1e-e086-49b7-8e88-c65090ff2bad'"  nsresult: "0x805303f4 (<unknown>)" 
      
      
      1. Tach!

        Dann mit contentWindow. Das Ergab im Debugger:

        Fehler beim Laden der folgenden Adresse: Could not load the source for blob:https://meineseite.de/d96b7a1e-e086-49b7-8e88-c65090ff2bad.
        [Exception... "Failed to open input source 'blob:https://meineseite.de/d96b7a1e-e086-49b7-8e88-c65090ff2bad'"  nsresult: "0x805303f4 (<unknown>)" 
        

        Scheint mir kein Problem von contentWindow zu sein, sondern mit dem Abrufen des Dokuments oder dem Zeitpunkt des Zugriff.

        dedlfix.