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 становится нулевым или неопределенным как-то.

1 ответ

Решение

Наконец, я нашел решение здесь: /questions/37145745/ispolzovanie-easyxdm-dlya-svyazi-mezhdu-roditelskim-dokumentom-i-dochernim-iframe-zagruzhennyim-iz-drugogo-domena-amazon/37145758#37145758. Я удалил iframe от родителя и добавил container свойство сокета к id из div и это сработало. Причиной этого было то, что код EasyXDM автоматически добавляет iframe к вашему документу. Если вы добавите iframe с URL ребенка, вы получите эту ошибку. Из связанного ответа, вот четкое объяснение:

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

Другие вопросы по тегам