`Uncaught TypeError: Не удается прочитать свойство 'postMessage' из неопределенной `ошибки при отправке междоменных сообщений с использованием EasyXDM

Я пытаюсь создать систему обмена данными между двумя веб-сайтами на их клиентских сторонах. Я использую 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 каким-то образом становится нулевым или неопределенным.


person Shiva Pareek    schedule 29.06.2014    source источник
comment
Вы проверили, что сокет был правильно инициализирован при загрузке вашей страницы, прежде чем нажать «Отправить»? Разве ваш тег script не должен быть в голове?   -  person rob    schedule 30.06.2014
comment
@rob спасибо за ответ. Наконец-то я нашел ответ и опубликовал его. Проверьте это. :)   -  person Shiva Pareek    schedule 30.06.2014


Ответы (1)


Наконец, я нашел решение здесь: https://stackoverflow.com/a/13122604/1576363. Я удалил iframe из родителя и добавил свойство container сокета к id div, и это сработало. Причиной этого было то, что код EasyXDM автоматически добавляет iframe к вашему документу. Если вы добавите iframe к URL-адресу ребенка, вы получите эту ошибку. Из связанного ответа, вот четкое объяснение:

«Потребитель» — это родительский документ, а EasyXDM загружает «поставщика», который является дочерним iframe.

person Shiva Pareek    schedule 30.06.2014
comment
так мало людей работали с easyXDM. Не могли бы вы взглянуть на stackoverflow.com /questions/27203172/ пожалуйста? - person VB_; 30.11.2014
comment
Узнал это на своей шкуре на этой неделе - person dwbartz; 19.09.2016