【问题标题】:postMessage() generates error "undefined is not a function"postMessage() 生成错误“未定义不是函数”
【发布时间】:2015-01-29 09:42:58
【问题描述】:

我正在尝试让postMessage() 在 iframe 和我的主网站之间进行通信。但是,使用MDN 上的example code 中给出的确切语法,我收到了一个不错的Undefined is not a function 错误。我尝试了几件事,例如在 Javascript 中初始化 iframe 并将其附加到我的页面,但这给我留下了同样的错误。有单独的选择器来选择我的 iframe 也是如此。

我有以下 Javascript 代码:

<script type="text/javascript">
    $(document).ready(function() {
        $('.editor').postMessage("A", "domain here");
    });

    function receiveMessage(event)
    {
        if (event.origin !== "domain here")
            return;

        // Do something
    }

    window.addEventListener("message", receiveMessage, false);
</script>

上面的脚本尝试在页面上向我的 iframe 发送消息,如下所示:

<iframe src="domain here/frameListener.html" class="editor"></iframe>

然后它有一个函数receiveMessage 来捕获作为对主网页的响应而发送的任何消息。最后但并非最不重要的一点是,我尝试了this question 中给出的答案:但这并没有解决我的问题。因此它不是重复的。

我怎样才能摆脱这个错误信息?

【问题讨论】:

  • postMessageWindow 对象的方法,而 $('.editor') 是 jQuery 对象
  • @hindmost 谢谢,我已将代码更改为 Jivings 答案中给出的示例,但这并没有解决我的问题。
  • 难以置信!因错误的 MDN 示例而浪费时间...感谢您的提问和回答!

标签: javascript jquery html iframe postmessage


【解决方案1】:

postMessage 不是 jQuery 函数,因此您需要获取实际的 window DOM 元素并在其上调用它:

 $('.editor').get(0).contentWindow.postMessage("A", "domain here");

此外,您需要访问iframecontentWindow 属性。以下是 MDN 文档的摘录:

otherWindow.postMessage(message, targetOrigin, [transfer]);

otherWindow

对另一个窗口的引用;这样的参考可能是 例如,使用 iframe 的 contentWindow 属性获得 元素,由 window.open 返回的对象,或者由命名或数字返回的对象 window.frames 上的索引。

【讨论】:

  • 所以如果你想使用Javascript方法,你根本不能使用JQuery选择一个元素?那是蹩脚的:/感谢您的回答!将对其进行测试并接受您的答案。
  • 不幸的是,将我的代码更改为您的示例后,我得到了相同的错误消息。
  • @KevinVoorn 已更新。您需要访问contentWindow 属性
  • 是的,成功了。谢谢,一直在纠结这个,哈哈。所以如果我理解正确的话,你不能在 JQuery 选定的对象上使用 Javascript 方法?
  • @KevinVoorn 谢谢!很高兴我能帮上忙
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 2020-11-07
  • 2015-02-24
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 2021-10-06
  • 2013-06-06
相关资源
最近更新 更多