Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari扩展:WebSocket连接失败调用onclose而非onerror且无异常_Javascript_Safari_Websocket_Safari Extension - Fatal编程技术网

Javascript Safari扩展:WebSocket连接失败调用onclose而非onerror且无异常

Javascript Safari扩展:WebSocket连接失败调用onclose而非onerror且无异常,javascript,safari,websocket,safari-extension,Javascript,Safari,Websocket,Safari Extension,我正在为Firefox、Chrome和Safari编写浏览器扩展。当尝试使用Safari扩展连接到WebSocket服务器时,如果没有服务器侦听特定端口,我的Safari扩展不会引发异常,也不会调用OneError。而是调用Safari扩展的onclose处理程序。我还在控制台中看到以下消息: [Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html,

我正在为Firefox、Chrome和Safari编写浏览器扩展。当尝试使用Safari扩展连接到WebSocket服务器时,如果没有服务器侦听特定端口,我的Safari扩展不会引发异常,也不会调用OneError。而是调用Safari扩展的onclose处理程序。我还在控制台中看到以下消息:

[Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html, line 0)
在Firefox和Chrome上,它似乎可以正确地处理它,并调用OneError

我只是在做这样的事情:

var socket = new WebSocket('ws://127.0.0.1:'+inPort, inHandlerName);
socket.binaryType = "arraybuffer";
theSocket.onclose = function(event)
然后声明onopen、onclose、onerror和onmessage的处理程序。inPort是9000,inHandlerName是一个类似“全局处理程序”的字符串。我在每个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消息中,我得到了如下事件参数:

var socket = new WebSocket('ws://127.0.0.1:'+inPort, inHandlerName);
socket.binaryType = "arraybuffer";
theSocket.onclose = function(event)
事件包含一个名为code的字段。当我无法连接到服务器时,代码值为1006。我目前已将其修复,以便它检查是否在Safari中运行,然后检查:

if(event.code == 1006)

如果是这样,我将执行与Firefox和Chrome在错误情况下相同的处理。

我需要知道关闭和错误之间的区别的原因是,如果服务器无法绑定到特定端口,我可以尝试不同的端口号。如果是关闭,则可能是服务器崩溃,但能够最初绑定到该端口,因此客户端可能希望再次尝试该端口。太棒了。我一直在寻找的答案。