【问题标题】:Socket.IO chat in html popup windowhtml 弹出窗口中的 Socket.IO 聊天
【发布时间】:2012-10-10 11:04:09
【问题描述】:

我尝试使用生成的私人消息弹出窗口进行 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

【问题讨论】:

  • 你有 swf 文件作为后备?
  • socket.io.js 的同一文件夹中,您应该会看到一个WebSocketMain.swf 文件
  • 没什么,我用 npm 方法安装模块
  • 请描述一下 .swf 文件如何解决我的问题?
  • 查看我的答案(很抱歉,socket io 的官方网站现在对我来说已关闭,我无法搜索官方答案:))

标签: jquery node.js popup socket.io


【解决方案1】:

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>

在 private.php 中

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

它应该可以工作。我将套接字的逻辑移到index.php 中,将视图逻辑留在private.php 中。我已经测试过了,它可以工作。

【讨论】:

  • 不工作:(这里是类似的例子:stackoverflow.com/questions/8152829/…
  • 你能把你的测试上传到 jsfiddle 上吗?
  • 不工作 :( 我也有同样的问题vlacky.site11.com/popup 。请告诉我哪里出错了?
  • 新窗口中的消息未附加,我现在不知道为什么。
  • 是的...在您的代码中尝试在点击处理程序中移动$(popUpWin).ready(function() {
猜你喜欢
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2017-07-19
  • 1970-01-01
相关资源
最近更新 更多