拒绝致电方法chromewindow.postmessage for iframe for xul页面



我有一个扩展名,并且其中一个XUL文件(我们称其为a)。XUL文件包含一个<iframe>,其中加载了一些网页(我们称其为B)。B从不同的域加载。
A是B的父母。我想使用window.parent.postMessage()从B内部发送一条消息。我得到以下例外:

...拒绝B呼叫方法ChromeWindow.postMessage

如何解决该错误?如果没有办法这样做,我该如何将消息从b传递到A?

我在Windows 7下使用Firefox 16.0.1。

我有一个非常相似的问题,只是我有一个HTML-POPUP(本地),无法将"后帖子"发送到我的Xul-Background-Task。我想我把它上班了,奇怪的是,启动我自己的信息event(postessage也是如此)但是,有了(我相信过时的)后备。简而言之:我从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

希望这也对您有用(没有在iframes上检查...)

您应该检查iframe b

type

编辑:

显然,您必须将铬片标记为可访问的,并考虑安全性。

刚刚发布,以防有人面对同样的问题。
如下所述,成功地将消息从B内部发布到A内。

但没有答案,因为window.parent.postMessage()仍然无法按预期工作。

相关内容

  • 没有找到相关文章

最新更新