我正在为 Firefox、Chrome 和 Safari 编写浏览器扩展。当尝试使用没有服务器监听特定端口的 Safari 扩展连接到 WebSocket 服务器时,我的 Safari 扩展不会引发异常,也不会调用 onerror。相反,正在调用 Safari 扩展的 onclose 处理程序。我还在控制台中看到此消息:
[Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html, line 0)
在 Firefox 和 Chrome 上,它似乎可以正确处理它 AFAIK 并调用 onerror。
我只是在做这样的事情:
var socket = new WebSocket('ws://127.0.0.1:'+inPort, inHandlerName);
socket.binaryType = "arraybuffer";
然后声明 onopen、onclose、onerror 和 onmessage 的处理程序。 inPort 是 9000,inHandlerName 是一个类似于“global-handler”的字符串。我在每个 WebSocket 处理程序以及具有创建 WebSocket 的代码的函数中放置了异常处理程序,但我没有看到捕获到任何异常。
这是一个已知问题吗?有没有办法查明连接是否失败?
编辑: 这也发生在 Safari 中的一个简单网页上:
var theSocket = new WebSocket('ws://127.0.0.1:9000', 'global-message');
theSocket.onopen = function()
{
console.log("onopen");
};
theSocket.onerror = function()
{
console.log("onerror");
};
theSocket.onmessage = function()
{
console.log("onmessage");
};
theSocket.onclose = function()
{
console.log("onclose");
};
最佳答案
这似乎不是它应有的工作方式,但在 onclose 消息中,我得到了一个这样的事件参数:
theSocket.onclose = function(event)
并且该事件包含一个名为代码的字段。当我无法连接到服务器时,代码值为 1006。我目前已修复它,以便它检查它是否在 Safari 中运行,然后检查:
if(event.code == 1006)
如果是这样,我将对 Firefox 和 Chrome 的错误情况进行相同的处理。
关于javascript - Safari 扩展 : WebSocket connection failure calls onclose and not onerror and no exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594331/