2013-01-16 13 views
8

Ich bin ziemlich neu in JavaScript und ich versuche, Wert einer Variablen aus einem eingebetteten iframe zu erhalten. Ich habe auf grundlegende Tests zurückgegriffen, um sicherzustellen, dass ich die Methode richtig bekomme ...Zugriff auf JavaScript-Variable in einem iframe, aus dem übergeordneten Fenster auf derselben Domäne

Ich habe versucht, die gemeinsamen Vorschläge und alles zurück undefined. Ich möchte die Variable in einem onclick-Ereignis verwenden.

Im iframe Inhalt Ich habe alles ausgezogen und nur zum Testen haben diese:

<script> 
var test = "test"; 
</script> 

im Fenster Elternteil ich dies getan haben:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
var myVar = window.frames[0].window.test; 
</script> 
<a href="#" onclick='alert(myVar)' id="link">Click</a> 

ich keine der vorgeschlagenen versucht haben: grab global variable from an embedded iframe

Alles, was ich mache, kehrt unbestimmt zurück ... mache ich etwas grundsätzlich falsch?

Vielen Dank im Voraus ..

+2

Ihr JS-Code läuft wahrscheinlich * bevor * der iFrame geladen wurde. –

Antwort

11

Du Ausführung bereits das Skript, wenn die noch geladen wird, so dass es undefinedtest ist ist. Entweder warten Sie auf die load Veranstaltung iframe, oder einfach nur die Variable erhalten, wenn klicken:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
var myFrame = window.frames[0].window; 
</script> 
<a href="#" onclick='alert(myFrame.test)' id="link">Click</a> 
+0

Das scheint gut zu funktionieren. – Faldinio

7

Du anscheinend nicht für den Rahmen des Content warten, bevor myVar Zugriff geladen werden. Wahrscheinlichkeiten sind das <script> Element in dem Rahmen wurde noch nicht abgerufen oder ausgeführt, wenn Sie das tun.

Versuchen Sie, die variable Zuordnung zu verzögern, bis der Inhalt des Rahmens vollständig geladen ist:

<iframe src="iframe.html" id="iframe" onload="frameLoaded();" width="200" height="100"></iframe> 

<script> 
    var myVar; 
    function frameLoaded() { 
     myVar = window.frames[0].window.test; 
    } 
</script> 

Als beiseite, da Ihre Frage markiert würde ich vorschlagen, dass Sie so etwas wie schreiben:

<iframe src="iframe.html" id="iframe" width="200" height="100"></iframe> 

<script> 
    $("#iframe").on("load", function() { 
     var myVar = this.window.test; 
     $("#link").on("click", function() { 
      alert(myVar); 
     }); 
    }); 
</script> 
+0

Keine von beiden funktioniert. Mit dem normalen JavaScript bekomme ich einen Fehler in Firebug, der besagt, dass myVar nicht definiert ist und das onclick-Ereignis nicht auftritt. Mit der jQuery-Option sagt mir Firebug, dass this.window.test nicht definiert ist. – Faldinio

+1

@Faldinio, in der Tat, weil 'myVar' lokal in meiner Antwort ist. Ich habe nicht verstanden, dass Sie es in den globalen Rahmen stellen wollten. Antwort aktualisiert entsprechend. –

+0

Um ehrlich zu sein, hätte ich feststellen müssen, dass es in der Funktion definiert wurde und nicht außerhalb, aber ich habe den gleichen Code viel zu lange angeguckt! Es funktioniert mit der aktualisierten Antwort. – Faldinio

3

try

<iframe src="iframe.html" id="iframe" onload="loader()" width="200" height="100"> </iframe> 

<script> 
    var myVar 
    function loader(){ 
     myVar = window.frames[0].window.test; 
    } 
</script> 
<a href="#" onclick='alert(myVar)' id="link">Click</a> 
0

In der Nebenlösung I j Wir möchten darauf hinweisen, dass Sie bei Verwendung der jquery-onload-Event-Handler-Funktion und dem Zugriff auf das jquery-Objekt "this" die Schreibweise $ (this.attr) verwenden müssen.

Verwandte Themen