jQuery addEventListener没有找到函数

时间:2014-01-23 18:53:38

标签: javascript jquery html addeventlistener

我有一个页面使用window.postMessage监听来自另一个域(通过iframe)的页面上的消息。我之前的代码有效:

<script type="text/javascript">
    window.addEventListener("message", receiveMessage, false);

    function receiveMessage(event) {
      if (event.data == "scrollTop"){
          window.scrollTo(0,0);
      }
    }
</script>

即使上面的代码有效,我还是要限制它执行,除非.postMessage来自特定域(http://origindomain.com),所以我将上面的代码改为:

<script type="text/javascript">
    window.addEventListener("message", receiveMessage, false);

    $(function () {
        $.receiveMessage(function(event){  
            if (event.data == "scrollTop") {
                window.scrollTo(0, 0);
            }

            // An optional origin URL (Ignored where window.postMessage is unsupported).
            }, 'http://origindomain.com' );
        });
    });
</script>

第二种方法不起作用。 Firebug控制台中的错误输出是:

ReferenceError: receiveMessage is not defined
window.addEventListener("message", receiveMessage, false);

jQuery不是我的第一语言,所以如果解决方案很明显我会道歉。为什么receiveMessage()回调未定义?

1 个答案:

答案 0 :(得分:4)

您从未定义receiveMessage,而是尝试使用$.receiveMessage。你错过了使用jquery方法,你并不总是需要等待dom准备好。你也根本不需要jquery。

<script type="text/javascript">
    window.addEventListener("message", receiveMessage, false);

    //$(function () {
    function receiveMessage(event){  
        if (event.origin == "http://origindomain.com" && event.data == "scrollTop") {
            window.scrollTo(0, 0);
        }
    }
    //});
</script>

如果您安装了一个定义$.receiveMessage的jQuery插件,那么您可能根本不需要第一行,因为插件应该处理这个问题。但是,我不确定为什么这个功能需要一个插件。