Felix Riesterer: Von IFrame aus innerHTML in obersten Fenster

Beitrag lesen

Lieber Martin,

Hallo Frank,

fast. Aber auch schön. ;-)

Das DIV namens "inhalt" ist natürlich schon vorhanden.

"Natürlich"? Was ist "natürlich"?

Fehler: Erlaubnis zum Lesen der Eigenschaft Window.document wurde verweigert Quelldatei: http://127.0.1/iframe.php Zeile: 1

Das hat irgendwas mit Cross-Site-Scripting zu tun, allerdings liegen ja beide Dateien auf dem gleichen Server:

127.0.0.1/index.php (die Datei mit dem DIV-Container 'inhalt' und dem IFrame)
127.0.0.1/iframe.php (der IFrame der in den Container schreiben soll)

Möglich... Ich würde die JavaScript-Operation erst nach dem vollständigen Laden des Iframes ausführen lassen. Dazu notierst Du in Deinen <script>-Bereich folgendes:

<script type="text/javascript">

    var Grapscher = {  
        grapschen : function () {  
            if (!confirm("Soll jetzt gegrapscht werden?"))  
                return;  
  
            var elternFrame = top;  
            if (elternFrame == window)  
                alert("Kein Elternframe vorhanden!");  
  
            var doc = elternFrame.document;  
            if (!doc)  
                alert("Kein Zugriff auf das document Objekt im Elternframe!");  
  
            var div = elternFrame.doc.getElementById("inhalt");  
            if (!div)  
                alert("Kein Element mit der ID 'inhalt' gefunden...");  
            else  
                div.innerHTML = "123";  
        },  
  
        init : function () {  
            this.oldWinOnLoad = window.onload;  
            window.onload = function () {  
                if (typeof(window.Grapscher.oldWinOnLoad) == "function")  
                    window.Grapscher.oldWinOnLoad();  
                window.Grapscher.grapschen();  
            };  
        }  
    };  
  
    Grapscher.init();

</script>

In diesem (ungetesteten!) Beispiel wollte ich Dir zwei Dinge zeigen:
1. wie man ein JavaScript sinnvoll für ein HTML-Dokument aufbaut
   (also das mit dem "Autostart" nach dem Laden der Seite),
2. wie man sinnvolles Debugging betreibt

Das Script sollte Dir nun sagen können, wo genau das Problem auftritt.

Natürlich sollte dieses JavaScript in eine externe Datei ausgelagert werden, die Du dann in Deine HTML-Dokumente einbindest. Falls im "Eltern-DIV" verschiedene Inhalte eingetragen werden sollen, dann kannst Du die Funktion "grapschen" ja entsprechend erweitern, sodass Sie etwas von der aktuellen Iframe-Seite nimmt, um es in das Eltern-DIV zu schreiben. Dann ist das Script in diesem Punkt universell...

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)