javascript - Safari 扩展 : WebSocket connection failure calls onclose and not onerror and no exception

标签 javascript safari websocket safari-extension

我正在为 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/

相关文章:

javascript - 爬取 json 对象数组的最高效方法

php - 如何在 PHP 中创建 websockets 服务器?

javascript - 使用 PHP 刷新后保留选择选项

javascript - 在 JavaScript 中添加 Web 辅助功能支持

php - Wav 文件未在 mac 上的 safari 中加载

javascript - 链接 点击跟踪在 Safari 浏览器上不起作用

javascript - 如何在带有边缘的 ios Safari 中设置 ui 最小 View

javascript - 通过 websocket 发送时,JSON 将 Float32Array 缓冲区大小增加了很多倍

java - 为什么要使用 websocket,使用它有什么好处?

javascript - 我使用 Google 跟踪代码管理器在我的网站上触发代码。任何版本的 Internet Explorer 的自定义代码中的变量 "undefined"