我尝试使用生成的弹出窗口进行私人消息的Socket.IO聊天。 我在弹出窗口代码中使用windows.opener var来访问主页面中的变量和函数。在Firefox和Chrome中,window.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 :(得分:0)
IE9不支持原生websocket。所以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>
in private.php
window.receivedPrivate = function(data) {
$('#private_data_recieved').append(data);
}
window.opener.popupReady();
它应该有效。我在index.php
中移动了套接字的逻辑,并在private.php
视图中保持逻辑。我已经对它进行了测试,但它确实有效。