/ / Socket.IO чат в спливаючому вікні html - jquery, node.js, popup, socket.io

Socket.IO чат у спливаючому вікні html - jquery, node.js, popup, socket.io

Я намагаюся зробити Socket.IO чат, використовуючи спливне вікно для приватного повідомлення. Я використовую windows.opener var у коді спливаючого вікна для активації змінних та функцій на головній сторінці. У Firefox та Chrome вікно.opener.socket.on (...) функція успішно починається з спливаючого вікна коду, але IE9 не буде. Сервер Node.js у фоновому режимі надсилає та отримує події. Я використовую наступний код:

     //in index.php
var socket = io.connect("http://localhost:8080");
//other code
$("#users .user").live("click",function(){
//other code
popUpWin[client_id]=window.open("private.php", client_id, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=no,copyhistory=yes,width=300,height=400,left=" + left + ", top=" + top + ",screenX=" + left + ",screenY=" + top + "");
//other code
});


//in private.php
//other code
window.opener.socket.emit("popup",window.opener.client_id);//This work!
window.opener.socket.on("private_message", function (data) {This not work, private message event is send!
$("#private_data_recieved").append("<div><b>"+data.nick+":</b> "+parseString(data.message)+"</div>");
playSound();
});
//other code

Відповіді:

0 для відповіді № 1

IE9 не підтримує власний веб-сайт. Таким чином, бібліотека socket.io робить резервне копіювання системи xhr-polling. Це викликає певну проблему в IE (чесно кажучи, для мене невідомо).

Однак якщо ви зміните підхід до проблеми так:

в index.php

var EVENT = module.exports.EVENT;
var socket = io.connect("http://78.46.135.87:8060");
var win;
socket.on("private_message",function(data) {
win.receivedPrivate(data);
});

function openPrivate() {
win =window.open("private.php", 1, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=no,copyhistory=yes,width=300,height=400");
}
function popupReady() {
socket.emit("popup","1");
}
// and html
<a href="#" onclick="openPrivate()">Open private</a>

в private.php

window.receivedPrivate = function(data) {
$("#private_data_recieved").append(data);
}
window.opener.popupReady();

він повинен працювати. Я перемістив логіку роз'єму index.php залишити в private.php точка зору логічна. Я перевірив це, і це працює.