我陷入愚蠢的问题。我正在尝试开发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/