2009-11-02 18 views

Respuesta

1

Si el iframe está en un dominio diferente al de la página externa, con gran dificultad, o no aparece en absoluto.

En general, el navegador evita que javascript acceda al código desde un dominio diferente, pero si controla ambas páginas, existen algunos hacks para que algo funcione. Más o menos.

Por ejemplo, puede cambiar el fragmento de la URL del iFrame de la externa, sondear el fragmento desde el iframe y llamar a esa función. Hay un truco similar con el nombre de la ventana.

0

Puede acceder a la iframe con su nombre:

foo.putme(); 

funciones declaradas a nivel mundial dentro de la página de marco flotante se convertirán en miembros del objeto de la ventana para que iframe. Puede acceder al objeto window del iframe con el nombre del iframe.

Para que esto funcione, el iframe tiene que tener un atributo name:

<iframe name="foo" ...> 

Además, la página principal y la página iframe debe ser del mismo dominio.

+1

Lo depuro en firebug y dice: m.contentwindow.putmap no es una función – jamal

0

Proporcione al marco un nombre y una identificación, ambos idénticos. window.frameNameOrId_.functionName()

Ambos marcos deben estar en el mismo dominio (aunque hay formas de evitar esto a grado limitado)

1

En el conjunto de marcos, especifique un nombre para el marco y en la página principal se puede acceder al marco por su nombre de pila:

ventana. [FrameName] .putme();

8
window.frames['frameName'].putme(); 

Tenga en cuenta que esto normalmente solo funciona si el iframe se refiere a una página en el mismo dominio. Los navegadores restringen el acceso a páginas dentro de marcos que pertenecen a un dominio diferente por razones de seguridad.

3

Para una mayor robustez:

function getIframeWindow(iframe_object) { 
    var doc; 

    if (iframe_object.contentWindow) { 
    return iframe_object.contentWindow; 
    } 

    if (iframe_object.window) { 
    return iframe_object.window; 
    } 

    if (!doc && iframe_object.contentDocument) { 
    doc = iframe_object.contentDocument; 
    } 

    if (!doc && iframe_object.document) { 
    doc = iframe_object.document; 
    } 

    if (doc && doc.defaultView) { 
    return doc.defaultView; 
    } 

    if (doc && doc.parentWindow) { 
    return doc.parentWindow; 
    } 

    return undefined; 
} 

y

... 
var el = document.getElementById('targetFrame'); 

getIframeWindow(el).putme(); 
... 
0

Esto se puede hacer con JavaScript:

window.top.location.href = url; 

funciona perfectamente en todos los navegadores.

Cuestiones relacionadas