【问题标题】:`Uncaught TypeError: Cannot read property 'postMessage' of undefined ` error while sending cross domain messages using EasyXDM`Uncaught TypeError: Cannot read property 'postMessage' of undefined` 使用 EasyXDM 发送跨域消息时出错
【发布时间】:2014-08-20 00:53:11
【问题描述】:

我正在尝试在客户端的两个网站之间建立一个数据交换系统。我为此使用 EasyXDM。 (http://easyxdm.net/)。这是我的父网站代码:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>EasyXDM Test</title>
    <script type="text/javascript" src="easyXDM.debug.js"></script>
    <script type="text/javascript">
        var serv_socket = new easyXDM.Socket({
            remote: "http://localhost:39452/EasyXDM/Default.aspx",
            onMessage: function (message, origin) {
                document.getElementById('msg').innerText="Received '" + message + "' from '" + origin + "'";
            },
            onReady: function () {
                serv_socket.postMessage("ID");
            }
        });
    </script>
</head>
<body>
    <form id="form1">
    <div>
    <iframe src="http://localhost:39452/EasyXDM/Default.aspx"></iframe>
        <input type="text" id="msgtext" /><a href="#" onclick="serv_socket.postMessage('d')">Send message</a>
        <div id="msg"></div>
    </div>
    </form>
</body>
</html>

下面是位于localhost:39452域的子网站代码:

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Server</title>

</head>
<body>
    <form id="form1">
        <input type="text" id="msgtext" />
        <div>
            <script type="text/javascript" src="easyXDM.debug.js"></script>
            <script type="text/javascript">
                var socket = new easyXDM.Socket({
                    onMessage: function (message, origin) {
                        //document.getElementById('msg').innerText="Received '" + message + "' from '" + origin + "'";
                        socket.postMessage(message);
                    },
                    onReady: function (msg) {
                        socket.postMessage(msg);
                    }
                });
                function send() {
                    socket.postMessage('this is message from server');
                }
            </script>
            <a href="#" id="sender" onclick="send()">Send message</a>
        </div>
    </form>
</body>
</html>

问题是,当我在子网站上单击Send message 并调用socket.postMessage() 时,它会显示Uncaught TypeError: Cannot read property 'postMessage' of undefined.。请告诉我如何解决这个问题?

更新:socket 以某种方式变为 null 或未定义。

【问题讨论】:

  • 在点击发送之前,您是否在页面加载时检查了套接字是否已正确初始化?你的脚本标签不应该在头部吗?
  • @rob 感谢您的回复。我终于找到了答案并发布了它。看看这个。 :)

标签: javascript jquery html easyxdm


【解决方案1】:

我终于在这里找到了解决方案:https://stackoverflow.com/a/13122604/1576363。 我从父级中删除了iframe,并将套接字的container 属性添加到divid 中,它起作用了。原因是 EasyXDM 代码会自动将iframe 添加到您的文档中。如果在 child 的 URL 中添加 iframe,您将收到此错误。从链接的答案中,这是明确的解释:

“消费者”是父文档,EasyXDM 加载 “provider”是子 iframe。

【讨论】:

猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2019-02-12
  • 2021-09-20
  • 2021-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多