2016-08-10 4 views
0

Я использую Firefox 48, который должен быть стабильным для WebExtensions. Я подключил свое тестовое приложение с помощью 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!"); 
    }); 
}); 

Как отключить соединение от отсоединения? ТИА

EDIT: Также попробовал же расширение с хромом, потому что я прочитал here, что светлячок не поддерживает background, но проблема подключения преломления сохраняется.

EDIT 2: Обновленный мой код согласно сказал Эндрю, до сих пор не работает:

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

Я также попытался выше код, комментируя scripts линию, по-прежнему не работает.
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> 

Если я удалю создание соединения с myclient.js, соединение не происходит вообще! Это означает, что bgp.html не работает.

ответ

1

Похоже, вы загружаете myclient.js как на свою фоновую страницу, так и на свою всплывающую страницу, но версия на фоновом режиме не работает, так как вы не загрузили библиотеку socket.io. Всплывающая страница загружает socket.io, поэтому она работает там, но всплывающая страница является эфемерной, она выгружается (и все созданные веб-файлы и т. Д. Очищаются), когда всплывающее окно отклоняется.

Вы не указали точно, что вы пытаетесь сделать, но если вам нужно одно долгое соединение socket.io, вы на правильном пути со справочной страницей. Наиболее целесообразным решением было бы создать фактическую страницу background.html и добавить теги <script> для загрузки socket.io, а затем создать ваш сокет с фоновой страницы и открыть всплывающие страницы с помощью фоновой страницы для доступа к сокету (который вы делать с runtime.sendMessage() или runtime.connect()).

Также пробовал такое же расширение с хромом, потому что я читал здесь, что firefox не поддерживает фон, но проблема разрыва соединения сохраняется.

Документация, на которую вы ссылаетесь, - это разрешение, называемое «фон», которое поддерживает Chrome, но Firefox этого не делает. Firefox поддерживает фоновые страницы в webextensions.

В ответ на второе редактирование исходного вопроса вы приближаетесь, но политика защиты содержимого по умолчанию для фоновых страниц запрещает встроенные скрипты. Если вы поместите свой код в отдельный.js и ссылаться на него с тега <script>, он должен работать

+0

Спасибо за ваш ответ, я обновил свой вопрос. К сожалению, соединение не создается. –

+0

У вас есть решение? –

+0

можете ли вы опубликовать полный код для расширения, которое представляет проблему? –