Я работаю над расширениями браузера, которые взаимодействуют с локальным приложением, работающим на сервере WebSocket. Safari и Chrome Extensions были очень просты в реализации, и после некоторой головной боли, которая ощущала развитие FF, я думал, что смогу реализовать WebSockets, как и в других браузерах. Однако у меня были некоторые проблемы.Немедленное разъединение с использованием websocket в FireFox Addon
Я понимаю, что я не могу напрямую создать WebSocket в «основной» файл JS, и поэтому попытались использовать обходные пути, которые я нашел в Интернете:
https://github.com/canuckistani/Jetpack-Websocket-Example использует страницу-работника как своего рода прокси между основным и кодом WebSocket. Когда я реализую этот код, мое соединение WebSocket сразу же выводит ошибки w/{"isTrusted": true} как единственную информацию.
Я также попытался использовать скрытый кадр, поскольку он выглядит так, как 1Password имеет дело с связью websocket в их FF Addon, но это также приводит к той же самой непосредственной ошибке.
Когда я просто открываю подключение к моему серверу в своем обычном экземпляре FF, он прекрасно соединяется, но до сих пор я не получил ничего от работы с аддоном.
делает pageWorker с:
var pw = pageWorker.Page({
contentUrl: self.data.url('com.html'),
contentScriptFile: self.data.url('com.js')
})
com.html:
<!DOCTYPE HTML>
<html>
<body>
</body>
</html>
com.js:
document.onready = launchCom();
// Could this need to be on ready?
function launchCom() {
console.log("[com.js] launchCom Called");
var wsAvailable = false;
if ("WebSocket" in window) {
console.log("[com.js] Detected Websocket in Window, attempting to open...");
// WebSocket is supported.
ws = new WebSocket('ws://localhost:9001');
wsAvailable = true;
} else {
console.log("[com.js] Websocket is not supported, upgrade your browser!");
}
}
ws.onmessage = function(event) {
console.log(event.data);
}
ws.onopen = function(evt) {
console.log("[com.js] ws opened. evt: " + evt);
}
ws.onerror = function(evt) {
console.log("[com.js] ws error: " + JSON.stringify(evt));
}
Идущие это приводит:
console.log: xxx: [com.js] launchCom Called
console.log: xxx: [com.js] Detected Websocket in Window, attempting to open...
console.log: xxx: [com.js] ws error: {"isTrusted":true}
console.log: xxx: [com.js] ws closed. evt: {"isTrusted":true}
Любая помощь будет принята с благодарностью!