我有一个页面使用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()
回调未定义?
答案 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插件,那么您可能根本不需要第一行,因为插件应该处理这个问题。但是,我不确定为什么这个功能需要一个插件。