我正在为Firefox,Chrome和Safari编写浏览器扩展程序。当尝试使用Safari扩展连接到WebSocket服务器时,没有服务器侦听特定端口,我的Safari扩展不会抛出异常,也不会调用错误。相反,正在调用Safari扩展的onclose处理程序。我也在控制台中看到了这条消息:
[Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html, line 0)
在Firefox和Chrome上,它似乎正确处理了AFAIK并调用了错误。
我只是做这样的事情:
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");
};
答案 0 :(得分:8)
这看起来并不像它的工作方式,但在onclose消息中,我得到了这样的事件参数:
theSocket.onclose = function(event)
并且该事件包含一个名为code的字段。当我无法连接到服务器时,代码值为1006.我目前已修复它,以便检查它是否在Safari中运行然后检查:
if(event.code == 1006)
如果是这样,我将在Firefox和Chrome的错误案例中执行相同的处理。