2011-03-04 3 views
6

strophe.js 및 jQuery를 사용하여 웹 기반 MUC 클라이언트를 작성했으며 존재하지 않는 대화방을 보내고 jquery 언로드 이벤트에서 사용자 연결을 끊으려고합니다. 창. 사용자가 브라우저 탭을 탐색하거나 닫으면 MUC에서 로그 아웃해야합니다.페이지 언로드에서 스트로프 연결 끊기

로그 아웃 버튼을 사용하여이 이벤트에서 실행중인 코드를 테스트 했으므로 페이지에 표시되므로 스탠자가 정확한지 확실합니다. 브라우저가 연을 보내는 데 문제가 있다고 생각합니다. 창이 닫힙니다. 여기에 해결 방법이 있습니까? 나는 또한 onbeforeunload 이벤트를 시도했다. (전적으로 브라우저 간 호환이 아니란 것을 알고있다.)하지만 그 중 하나는 작동하지 않는다.

많은 조언을드립니다.

덕분에, 존

답변

10

는 모드를 동기화로 전환 확인하고 disconnect() 전화를 보내기 전에 flush()를 호출합니다. 다음은 예입니다.

var Client = { 
    connect: function(spec) { 
    this.connection = new Strophe.Connection(spec.url); 
    }, 

    disconnect: function() { 
    this.connection.options.sync = true; // Switch to using synchronous requests since this is typically called onUnload. 
    this.connection.flush(); 
    this.connection.disconnect(); 
    } 
} 

그런 다음 onbeforeunload/onunload에 바인딩 할 수 있습니다. (jQuery를 예)

var client = new Client; 
client.connect(); 
$(window).unload(function() { 
    client.disconnect(); 
}); 
+2

당신은 패치 Strophe.js를 필요가 : https://github.com/metajack/strophejs/ issues/16 –

+0

최신 strophe의 경우 this.connection.options.sync = true;를 사용해야합니다. – CristiC

+2

connection.options.sync = true 실제로 relogin 동안 내 하이브리드 응용 프로그램이 고정되었습니다. 진지하게. 나는 작은 크롬 프로파일 링을했다. 로그 아웃 후 다시 로그인하면 전체 앱이 정지되는 것으로 나타났습니다. 그러나 sync = true를 삭제하면 모든 것이 잘됩니다. 이 동기화는 정확히 무엇입니까? 모든 동작이 동기화 된 후 동기화 패턴을 설정한다고 가정합니다. 기본 비동기, 내 문제가 해결되었습니다. 나는 아직도 내 머리를 얻을 수 없다. –

2

어떤 패치가 필요하지, 내장 된 솔루션 지금 거기 :

connection.flush(); 
connection._options.sync = true;  
connection.disconnect(); 
관련 문제