所以,我在DomainA上有一个页面,并且使用Chrome扩展程序,我正在注入一些插入指向DomainB的iframe的javascript。
$("body").append("<iframe id='someFrame' src='http://www.domainB.com' width='300' height='800'></iframe>");
我还向DomainA注入了一些javascript,试图获取iframe的contentWindow。我想在其上使用HTML5 postMessage api。
$("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", "*");
});
但是,contentWindow属性未定义。为什么会这样,我怎么能绕过它呢?如果我将此扩展代码放在网页中,它本身就可以正常工作。
谢谢!
(原谅蹩脚的jquery / javascript)
答案 0 :(得分:10)
我知道回答我自己的问题有点蹩脚,但我做了一些挖掘工作,发现Chromium上存在一个错误问题:http://code.google.com/p/chromium/issues/detail?id=20773
答案 1 :(得分:1)
我认为这与内容脚本无法访问其父页面的窗口对象的原因相同。请参阅this question,它有一个解决方法的链接。
答案 2 :(得分:-1)
您需要在根框架中嵌入iframe,将iframe发送到客户端框架,然后将命令发送回根网站,如下例所示。这被称为“单向管道”黑客:
http://msdn.microsoft.com/en-us/library/bb735305.aspx