2010-06-13 108 views
6

La página A.com tiene 2 marcos flotantes B.com/page1 y B.com/page2. Este es el código de A.com:ejecutar javascript función en un iframe otra cuando el padre es de dominio diferente

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

quiero ejecutar la función js en B.com/page1 de B.com/page2. Ambos ejemplos a continuación funciona bien cuando el padre está en el mismo dominio, pero no en el escenario de varios dominios:

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

o

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

¿Hay alguna forma de hacerlo?

Respuesta

7

en lugar de

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

uso

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

se le permite atravesar la colección frames de cualquier ventana que se puede hacer referencia, pero en este caso se están tratando de atravesar el window propiedad recursiva de parent (que es la ventana). Esto no esta permitido.

+0

Sean, pero window.window es exactamente como una ventana. Sin embargo, intenté con 'parent.window.window.window.window.frames ['if1']. Window.window.window.s2 (1)' y funcionó ... (¿o habla de atravesar algo más?) –

3

No, el navegador no permite interacciones entre iframes que no están en el mismo dominio.

+0

Solo para que quede claro. Si bien los 2 iframes pertenecen al mismo dominio, no existe una forma directa de interactuar porque el padre es de un dominio diferente. – Frushko

+0

No, porque los iframes solo pueden "comunicarse" entre sí a través del marco principal y los marcos no pueden acceder al marco principal desde un dominio diferente. –

+2

En realidad, esto es incorrecto. Solo necesita cambiar 'parent.window.frames' en' parent.frames' –

0

Como Aaron ya te dijo, los navegadores no permiten esto, pero hay formas de evitarlo. Tendrás que crear un pequeño truco. Eugene Gladyshev tiene un post on it on his blog.

Cuestiones relacionadas