7

Donc, j'ai une page sur DomainA, et, en utilisant une extension Chrome, j'injecte du javascript qui insère un iframe qui pointe vers DomainB.Pourquoi mon extension Chrome ne peut-elle pas utiliser HTML5 postMessage pour communiquer avec une image que j'injecte?

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

J'injectent également un javascript dans DomaineA qui tente d'obtenir contentWindow du iframe. Je souhaite utiliser l'API HTML5 postMessage.

$("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", "*"); 
}); 

Toutefois, la propriété contentWindow n'est pas définie. Pourquoi est-ce, et comment puis-je contourner? Si je mets ce code d'extension dans une page Web cela fonctionnera bien par lui-même.

Merci!

(pardonnez le merdiques jquery/javascript)

+0

Êtes-vous juste essayer de faire une demande de domaine croix? Ou vous avez besoin de ces iframes? – serg

+0

J'ai besoin de l'iframe pour afficher le contenu sur un autre serveur. – Newtang

Répondre

10

Je sais que c'est un peu boiteux pour répondre à ma propre question, mais je l'ai fait un peu plus creuser, et a trouvé un bogue déposé le chrome pour la question: http://code.google.com/p/chromium/issues/detail?id=20773

J'ai trouvé ce lien dans le groupe d'extensions de chrome: http://groups.google.com/a/chromium.org/group/chromium-extensions/browse_thread/thread/1d4b68f0971ef190/3446a7e82848351c?lnk=gst&q=contentWindow#3446a7e82848351c

+10

Ce n'est pas boiteux. Ce qui est boiteux, c'est * pas * d'afficher la réponse si vous la trouvez. –

1

Je pense qu'il est pour les mêmes raisons pour lesquelles les scripts contenus ne peuvent pas accéder à l'objet de la fenêtre de leur page parent. Voir this question, et il a un lien vers une solution de contournement.

+0

Merci pour le lien! – Newtang

-1

Vous devez incorporer un iframe dans votre cadre racine qui envoie des demandes à une trame client, qui envoie ensuite des commandes au site Web racine, comme indiqué dans l'exemple suivant. Ceci est connu comme le « tuyau sens unique » pirater .: http://msdn.microsoft.com/en-us/library/bb735305.aspx
alt text

+0

Ce n'est pas ce que je cherche. Je n'ai pas besoin d'utiliser un hack pour une extension de chrome. J'essaie de comprendre pourquoi la propriété contentWindow n'est pas définie, donc je peux utiliser postMessage. – Newtang