javascript
  • google-chrome
  • google-chrome-extension
  • postmessage
  • 2010-11-01 7 views 7 likes 
    7

    Quindi, ho una pagina su DomainA e, usando un'estensione di Chrome, sto inserendo alcuni javascript che inseriscono iframe che punta a DomainB.Perché la mia estensione chrome non può utilizzare postMessage HTML5 per comunicare con un frame che viene iniettato?

    $("body").append("<iframe id='someFrame' src='http://www.domainB.com' width='300' height='800'></iframe>"); 
    

    Ho anche iniettare un po 'javascript in DomainA che tenta di ottenere contentWindow del iframe. Voglio usare l'api postMessage HTML5 su di esso.

    $("body").append("<a class='myLink'>Post Message</a>"); 
    $(".myLink").click(function(){ 
        var frameElem = document.getElementById("someFrame"); 
        console.log("frameElem: " + frameElem); //succeeds 
    
    var contentWin = frameElem.contentWindow; 
    console.log("contentWin : " + contentWin); //undefined 
    
    //can't do this since contentWin is undefined: 
    //contentWin.postMessage("data", "*"); 
    }); 
    

    Tuttavia, la proprietà contentWindow non è definita. Perché è così, e come posso aggirarlo? Se inserisco questo codice di estensione in una pagina web funzionerà da solo.

    Grazie!

    (pardon il schifoso jquery/javascript)

    +0

    Stai solo cercando di fare una richiesta di dominio croce? O hai bisogno di quegli iframe? – serg

    +0

    Ho bisogno dell'iframe per mostrare il contenuto su un altro server. – Newtang

    risposta

    10

    So che è un po 'stupido per rispondere alla mia domanda, ma ho fatto un po' di scavo, e ha trovato un bug depositata il cromo per la questione: http://code.google.com/p/chromium/issues/detail?id=20773

    ho trovato questo link nel gruppo estensioni di cromo: http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/1d4b68f0971ef190/3446a7e82848351c?lnk=gst&q=contentWindow#3446a7e82848351c

    +10

    Non è zoppo. Quello che è zoppo è * non * pubblicare la risposta se la trovi. –

    1

    Penso che sia per le stesse ragioni per cui gli script di contenuti non possono accedere all'oggetto finestra del loro pagina padre. Vedere this question e ha un collegamento a una soluzione alternativa.

    +0

    Grazie per il link! – Newtang

    -1

    È necessario incorporare un iframe nel frame principale che invia richieste a un frame del client, che quindi invia comandi al sito Web principale come mostrato nell'esempio seguente. Questo è noto come il 'tubo di sola andata' incidere .: http://msdn.microsoft.com/en-us/library/bb735305.aspx
    alt text

    +0

    Questo non è quello che sto cercando. Non ho bisogno di utilizzare un trucco per un'estensione di Chrome. Sto cercando di capire perché la proprietà contentWindow non è definita, quindi posso usare postMessage. – Newtang

     Problemi correlati

    • Nessun problema correlato^_^