2012-10-19 6 views
0

개인 메시지 용으로 생성 된 팝업 창을 사용하여 Socket.IO 채팅을 시도합니다. 팝업 창 코드에서 windows.opener var를 사용하여 주 페이지의 변수 및 함수를 액세스합니다. Firefox 및 Chrome에서는 window.opener.socket.on (...) 함수가 팝업 창 코드에서 성공적으로 시작되지만 IE9는 그렇지 않습니다. 백그라운드의 Node.js 서버는 이벤트를 보내고받습니다. 다음 코드를 사용합니다 :html 팝업 창에서 Socket.IO 채팅

 //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

대체로 swf 파일이 있습니까? –

+0

아니요, 설명해주세요. – Vlatko

+0

'socket.io.js'의 같은 폴더에'WebSocketMain.swf' 파일이 보입니다. –

답변

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> 

에이 일을해야 private.php

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

에. 나는 index.php에서 소켓의 논리를 옮겨서 private.php의 논리적 뷰를 떠났다. 나는 그것을 테스트하고 작동합니다.

+0

작동하지 않습니다 :(다음은 비슷한 예입니다 : http://stackoverflow.com/questions/ 8152829/실행 기능 - 부모 창에서 부모 창, – Vlatko

+0

jsfiddle에서 테스트를 업로드 할 수 있습니까? – Vlatko

+0

작동하지 않습니다 :(여기에 같은 문제가 있습니다. http://vlacky.site11.com/popup/ – Vlatko

관련 문제