2010-06-13 17 views
6

Die Seite A.com hat 2 iframes B.com/page1 und B.com/page2. Diese ist der Code von A.com:JavaScript ausführen Funktion in einem anderen iframe wenn Elternteil von anderen Domäne

<html><body> 
    <iframe src="b.com/page1" name="iframe1" id="iframe1"> 
    <iframe src="b.com/page2"> 
</body></html> 

Ich möchte js Funktion auf B.com/page1 von B.com/page2 auszuführen. Beide Beispiele unten funktioniert gut, wenn die Eltern aus der gleichen Domäne ist aber nicht in Cross-Domain-Szenario:

parent.window.frames['iframe1'].SomeFunction(args); 

oder

parent.document.getElementById('iframe1').contentWindow.SomeFunction(args); 

Gibt es eine Möglichkeit, es zu tun?

Antwort

7

Statt

Verwendung

parent.frames['iframe1'].SomeFunction(args); 

Sie sind die frames Sammlung von jedem Fenster überqueren erlauben die Sie verweisen können, aber in diesem Fall, dass Sie versuchen, die rekursive window Eigenschaft parent (die das Fenster IST) zu durchqueren. Das ist nicht erlaubt.

+0

Sean, aber window.window ist genau wie Fenster. Wie auch immer - ich habe dieses "parent.window.window.window.frames ['if1']. Window.window.window.s2 (1)' und es hat funktioniert ... (oder sprichst du davon, etwas anderes zu tun?) –

3

Nein, der Browser erlaubt keine Interaktionen zwischen Iframes, die sich nicht in derselben Domäne befinden.

+0

Nur um es klar zu machen. Obwohl die 2 Iframes aus derselben Domäne stammen, gibt es keinen direkten Weg für sie, zu interagieren, weil der Elternteil aus einer anderen Domäne stammt. – Frushko

+0

Nein, weil die Iframes über den übergeordneten Frame nur miteinander "sprechen" können und die Frames nicht von einer anderen Domain auf den übergeordneten Frame zugreifen können. –

+2

Eigentlich ist das falsch. Er muss nur "parent.window.frames" in "parent.frames" ändern. –

0

Wie Aaron dir bereits gesagt haben, erlauben Browser dies nicht, aber es gibt Möglichkeiten. Sie müssen einen kleinen Hack erstellen. Eugene Gladyshev hat eine post on it on his blog.

Verwandte Themen