我陷入愚蠢的问题。我正在尝试开发Firefox扩展,其中有一个弹出面板,并且在该面板中有一个task.html文件的iframe。

我想在我的网页上单击一个按钮后将Messagepost传递到该iframe(例如,与插件进行网页交互),但是它不起作用。

这是面板上外观的图像。



这是M用来将数据发送到iframe的功能。单击网页中的按钮时,将调用发布功能。

function Post() {
    var iframe = window.document.getElementById("iframe").contentWindow;
    postMessageToWindow(iframe, "Hello");
}

function postMessageToWindow(win, message) {
    try {
        win.postMessage(message, '*');
        return true;
    } catch(e) {
         return false;
    }
}


在那个html页面中

window.addEventListener('message', function(e) {
    var str_data = e.data;
    document.getElementById('test').innerHTML = str_data;
});


但测试DIV中没有任何显示。

请帮我。谢谢。

最佳答案

忽略有关win.postMessage的消息,我不知道postMessage是“本地”函数。帮助您我学到了东西很酷。

无论如何,如果您的代码是第一次使用,那就太好了。感谢Blargh的一些信息,我找到了您的问题。

找到sample_button.appendChild(tasks_popup);并将其删除,为什么要这样做?现在,它克隆了原始对象并添加了它。

另一件事,为什么要通过postMessage?代替postMessage,您只需执行tasks_iframe.contentDocument.querySelector('#test').innerHTML = 'why bother with postMessage, just do this? but i fixed postMessage for you too<br>';

另一件事,300ms的间隔有效,但是它的强度很大,而不是最佳解决方案。它将暂时工作。

您是否打算将其上传到addons.mozilla.org?他们不喜欢设置innerHTML,如果您打算在那里发布,请告诉我,我将向您展示如何在没有innerHTML的情况下进行操作。

此外,overlay.xul面板中的“刷新”按钮也需要固定为document.getElementById('tasks-list').contentDocument.location.reload()

关于javascript - 使用window.postMessage将消息发布到iframe,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21973782/

10-12 07:02