2016-08-10 8 views
0

WebExtensions에서 안정적인 Firefox 48을 사용하고 있습니다. 내 테스트 응용 프로그램을 Socket.IO에 연결했습니다. 팝업을 닫으면 socket.IO 연결이 끊어집니다. 여기에 코드입니다 :팝업이 닫히면 Socket.IO 연결이 끊어집니다.

manifest.json을

{ 
    "manifest_version": 2, 
    "name": "myapp", 
    "version": "1.0", 
    "browser_action": { 
     "default_icon": { 
      "96": "button/icon.png" 
     }, 
    "default_title": "myapp", 
    "default_popup": "popup/main.html" 
    } 
    "background": { 
     "scripts": ["myclient.js"] 
    } 
} 

main.html

<body> 
<script src="/scripts/socket.io.js"></script> 
<script src="/scripts/jquery-2.2.4.min.js"></script> 
<script src="/myclient.js"></script> 
</body> 

myclient.js

var address = "localhost"; 
var client = io("http://" + address + ":17001/"); 
client.on("message", function() { 
    $("#test").text("message"); 
}); 

내 nodeJS 서버 코드

console.log("Server started"); 
var io = require("socket.io")(17001); 
io.on("connection", function (socket) { 
    var address = socket.request.connection.remoteAddress; 
    console.log("Someone joined. Socket ID:", socket.id, address); 
    io.emit("message"); 
    socket.on("disconnect", function() { 
     console.log("Someone disconnected!"); 
    }); 
}); 

연결이 끊어지는 것을 어떻게 막을 수 있습니까?

편집 TIA

: 나는 파이어 폭스 background를 지원하지 않는 here을 읽고, 아직 접속 차단의 문제가 계속 있기 때문에 또한 크롬과 같은 확장을 시도했다.

편집 2 : 앤드류 말에 따라 여전히 작동하지 않는, 내 코드를 업데이트 :

"background": { 
    "scripts": ["myclient.js", "/scripts/socket.io.js", "/scripts/jquery-2.2.4.min.js"], 
    "page": "bgp.html" 
} 

가 나는 또한 scripts 라인을 주석으로 위의 코드를 시도, 여전히 작동하지 않습니다. 내가 myclient.js에서 연결의 생성을 제거하면

bgp.html
<!DOCTYPE html> 
<html lang="en"> 
<body> 
<script src="/scripts/socket.io.js"></script> 
<script> 
    var address = "localhost"; 
    var client = io("http://" + address + ":17001/"); 
</script> 
</body> 
</html> 

을, 연결이 전혀 발생하지 않습니다! 즉, bgp.html이 작동하지 않는다는 의미입니다.

답변

1

배경 페이지와 팝업 페이지 모두에서 myclient.js를로드하는 것처럼 보이지만 거기에 socket.io 라이브러리를로드하지 않았으므로 백그라운드 페이지의 버전이 작동하지 않습니다. 팝업 페이지는 socket.io를로드하여 작동하지만 popup 페이지가 일시적이므로 팝업이 닫히면 언로드됩니다 (그리고 생성 된 모든 웹 소켓 등은 정리됩니다).

정확히 무엇을 하려는지는 말하지 않았지만 오래 지속되는 socket.io 연결을 원한다면 배경 페이지와 함께 올바른 길을 가고 있습니다. 가장 편리한 방법은 실제 background.html 페이지를 만들고 <script> 태그를 추가하여 socket.io를로드 한 다음 배경 페이지에서 소켓을 만들고 팝업 페이지를 배경 페이지와 교환하여 소켓에 액세스하는 것입니다. runtime.sendMessage() 또는 runtime.connect()으로 수행). 나는 파이어 폭스 배경을 지원하지 않습니다 여기에 읽기, 아직 접속 차단의 문제가 계속 있기 때문에

또한 크롬과 같은 확장을 시도했다.

링크 된 문서는 Chrome에서 지원하지만 Firefox에서는 지원하지 않는 "배경"이라는 사용 권한에 대한 것입니다. Firefox는 webextensions에서 배경 페이지를 지원합니다.

원본 질문의 두 번째 편집에 대한 응답으로 백그라운드 페이지에 대한 기본 콘텐츠 보안 정책이 인라인 스크립트를 허용하지 않습니다. 코드를 별도로 넣는다면.js 파일을 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 제 질문을 업데이트했습니다. 불행히도 연결이 생성되지 않습니다. –

+0

해결책이 있습니까? –

+0

문제를 나타내는 확장 프로그램의 전체 코드를 게시 할 수 있습니까? –

관련 문제