2012-02-22 15 views
29

Per esempio, ho un sito chiamato example.com su cui iframe è incorporato nel dominio iframe.net, ora voglio leggere il contenuto di iframe e passare alcuni parametri per visualizzare un messaggio testuale. Mi piace Salve con il nome utente.Problema iframe di dominio incrociato

Ora il problema è questo non è in grado in grado di effettuare il collegamento tra i due, anche se non sono in grado di ottenere l'innerHTML di iframe ho usato seguente approccio

document.getElementById('myframe').contentWindow.document.body.innerHTML; 

Getta errore "Permesso negato per accedere alla proprietà"

do qualcuno sa come leggere e scrivere nella piattaforma di dominio croce

+0

È possibile utilizzare easyxdm libreria per la comunicazione tra i domini incrociati. Ecco un link per favore checkout. Avevo usato questa tecnica per ridimensionare iframe (larghezza, altezza) su campi incrociati. Non sono sicuro che questa libreria funzioni con il tuo scenario. Provaci. http://easyxdm.net/wp/ –

risposta

37

Se non si ha il controllo sul sito incorniciato, non si può aggirare la politica di cross-domain.

Se si ha il controllo su entrambi i siti, è possibile utilizzare il metodo postMessage per trasferire dati su domini diversi. Un esempio molto semplice:

// framed.htm: 
window.onmessage = function(event) { 
    event.source.postMessage(document.body.innerHTML, event.origin); 
}; 

// Main page: 
window.onmessage = function(event) { 
    alert(event.data); 
}; 

// Trigger: 
// <iframe id="myframe" src="framed.htm"></iframe> 
document.getElementById('myframe').contentWindow.postMessage('','*'); 
+1

Esiste un proxy inverso per il dominio incrociato per farlo accadere –

+1

@KunalVashist Dipende dalla tua applicazione (sono necessari ulteriori dettagli). Dai anche un'occhiata a questa domanda [Modi per aggirare la politica della stessa origine] (http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy). –

+0

Thx @rob questo è buono, ma alla fine non ho accesso al contenuto del frame –

2

In Internet Explorer 8 evento passato come parametro può essere nulla, che è il motivo per cui è necessario accedere all'evento in maniera diversa:

In cornice .html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    evt.source.postMessage('Message from iFrame', evt.origin); 
}; 

Su main.html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    alert(evt.data); 
}; 

l'evento viene attivato allo stesso modo di Rob W ha presentato:

document.getElementById('frameId').contentWindow.postMessage('message','*');