Ell*_*ott 5 javascript safari websocket safari-extension
我正在为Firefox,Chrome和Safari编写浏览器扩展程序.当尝试使用Safari扩展连接到WebSocket服务器时,没有服务器侦听特定端口,我的Safari扩展不会抛出异常,也不会调用错误.相反,正在调用Safari扩展的onclose处理程序.我也在控制台中看到这条消息:
[Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html, line 0)
Run Code Online (Sandbox Code Playgroud)
在Firefox和Chrome上,它似乎正确处理它AFAIK并调用onerror.
我只是做这样的事情:
var socket = new WebSocket('ws://127.0.0.1:'+inPort, inHandlerName);
socket.binaryType = "arraybuffer";
Run Code Online (Sandbox Code Playgroud)
然后声明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");
};
Run Code Online (Sandbox Code Playgroud)
这看起来不像它应该工作的方式,但在onclose消息中,我得到一个这样的事件参数:
theSocket.onclose = function(event)
Run Code Online (Sandbox Code Playgroud)
并且该事件包含一个名为code的字段.当我无法连接到服务器时,代码值为1006.我目前已修复它,以便检查它是否在Safari中运行,然后检查:
if(event.code == 1006)
Run Code Online (Sandbox Code Playgroud)
如果是这样,我将在Firefox和Chrome的错误情况下执行相同的处理.
| 归档时间: |
|
| 查看次数: |
7750 次 |
| 最近记录: |