无法使用postMessage或addEventListener

6
以下 JavaScript 代码使用 HTML5 postMessage / addEventListener 函数向自身发送消息:
window.addEventListener('testMsg', function(event) {
   alert('got a message');   /* Never happens. Why? */
}, false );

window.addEventListener('load', function(event) {
   alert('sending message');    
   window.postMessage('testMsg', '*');
}, false);

一个对应的 JSFiddle:

http://jsfiddle.net/ZGvLg/3/

这个消息从未被接收到。原因是什么?


testMsg事件在哪里定义的? - Harsha Venkataramu
3个回答

5
我已经修改了这个示例。你监听的事件不正确。 示例链接 应该是这样的。
window.addEventListener('message', function(event) {
    alert('got a message');   /* Never happens. Why? */
}, false );

window.addEventListener('load', function(event) {
    alert('sending message');    
    window.postMessage('message', '*');
}, false);

1
几个小时的工作 vs. 在 Stack Overflow 上 3 分钟的查询,以及受益于新鲜的视角:) 谢谢! - Roman
@MESSIAH — 这是一个事件。这就是postMessage的全部意义。 - Quentin

3

您正在监听testMsg事件,但是postMessage将触发message事件。


正确答案 - Roman

0

正如其他人所说,你需要监听 "message" 事件,而不是 "testMsg"。这里是一个更清晰的工作代码示例

window.addEventListener('message', function(event) {
    alert('got a message'); // event.data == "hello world"
}, false );

window.addEventListener('load', function(event) {
    alert('sending message');
    window.postMessage('hello world!', '*');
}, false);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接