2009-11-02 6 views

risposta

1

Se l'iframe si trova in un dominio diverso rispetto alla pagina esterna, con molta difficoltà o per niente.

In generale, il browser impedisce a javascript di accedere al codice da un dominio diverso, ma se si controllano entrambe le pagine, ci sono alcuni hack per far funzionare qualcosa. Più o meno.

Ad esempio, è possibile modificare il frammento dell'URL di iFrame da quello esterno, eseguire il polling del frammento dall'iframe e chiamare tale funzione. C'è un trucco simile con il nome della finestra.

0

È possibile accedere al iframe con il suo nome:

foo.putme(); 

funzioni dichiarate a livello globale all'interno della pagina iframe diventeranno membri dell'oggetto finestra per quel iframe. È possibile accedere all'oggetto della finestra dell'iframe con il nome dell'iframe.

Per far funzionare tutto questo, il vostro iframe deve avere un attributo name:

<iframe name="foo" ...> 

Inoltre, la pagina principale e la pagina iframe dovrebbe essere dello stesso dominio.

+1

Lo debug in firebug e dice: m.contentwindow.putmap non è una funzione – jamal

0

Assegna al fotogramma un nome e un ID, entrambi identici. window.frameNameOrId_.functionName()

Entrambi i telai devono essere nello stesso dominio (anche se ci sono modi per aggirare questo per misura limitata)

1

Sul set di frame, specificare un nome per il telaio e nella pagina principale si può accedere al frame con il nome specificato:

window. [FrameName] .putme();

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

Si noti che questo di solito funziona solo se l'iframe si riferisce a una pagina nello stesso dominio. I browser limitano l'accesso alle pagine all'interno di frame che appartengono a un dominio diverso per motivi di sicurezza.

3

Per una maggiore robustezza:

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; 
} 

e

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

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

questo può essere fatto con JavaScript:

window.top.location.href = url; 

funziona perfettamente in tutti i principali browser.

Problemi correlati