我有一个扩展名,里面有一个XUL文件(我们称之为A)。 XUL文件包含<iframe>
,其中加载了一些网页(我们称之为B)。 B从不同的域加载
A是B的父级。我想使用window.parent.postMessage()
从B内向A发送消息。
我遇到以下异常:
... B拒绝调用方法ChromeWindow.postMessage
如何修复该错误?如果无法做到这一点,我怎样才能将消息从B传递给A?
我在Windows 7下使用Firefox 16.0.1。
答案 0 :(得分:1)
我有一个非常类似的问题, 只是我有一个html-popup(本地)无法将'postMessage'发送到我的xul-background-task。 我想我得上班了, 奇怪的是,通过启动我自己的MessageEvent(postMessage的功能完全相同) 但是(我相信过时的)后备......简而言之:我从MDN和其他网站一起酿造了一些东西;)
我在内容中的脚本:
var Communicator =
{
postMessage: function(data)
{
// We need some element to attach the event to, since "window" wont work
// let's just use a fallback JSON-stringified textnode
var request = document.createTextNode(JSON.stringify(data));
// and as always attach it to the current contentwindow
document.head.appendChild(request);
// Now let's make a MessageEvent of our own, just like window.postMessage would do
var event = document.createEvent("MessageEvent");
event.initMessageEvent ("own_message", true, false, data, window.location, 0, window, null);
// you might want to change "own_message" back to "message" or whatever you like
//and there we go
request.dispatchEvent(event);
}
}
而不是window.postMessage(数据)现在使用Communicator.postMessage(数据) 就这样! 现在,在我的叠加层中除了我们的旧版
之外什么都没有addEventListener('own_message', someMessageFunc, false, true);
//or maybe even "message" just like originally
希望这也适合你(没有在iframe上检查......)
答案 1 :(得分:0)
答案 2 :(得分:0)
发布以防有人遇到同样的问题 成功使用here所述的事件将消息从B内发布到A.
但这不是答案,因为window.parent.postMessage()
仍无法正常工作。