如何在javascript中使用chrome.socket?

时间:2014-10-27 07:00:04

标签: google-chrome-extension

如何解决此错误?

  

未捕获的TypeError:无法读取属性' socket'未定义的

它是background.js文件的一部分

    var SocketId = 0;
    chrome.socket.connect(SocketId, '127.0.0.1', 5053, function(result) {
        console.log('socket connect, result : '+result+'');
        if(result === 0) {
            chrome.socket.write(SocketId, str2ap('client say : Hello'), function(writeInfo){
                console.log('socket write, writeInfo.bytesWritten : '+writeInfo.bytesWritten+'');
            });
        }
    });

1 个答案:

答案 0 :(得分:2)

您的问题已标记为,因此我假设您正在尝试进行扩展。

套接字API仅适用于Chrome应用:

Chrome Extensions API list
Chrome Apps API list

两个列表都有一些独有的API。如果您绝对需要套接字通信,则有4种可能性:

  1. 切换到Chrome应用。在许多情况下,这不是一个选项,因为只有扩展可以与普通的浏览器内容交互。 Comparison between two(略有过时,但适用)。

  2. 制作配套应用,并要求用户同时安装。然后,使用External Messaging

  3. 在它们之间进行通信
  4. 制作一个原生应用(可以使用操作系统中可用的任何内容)并使用Native Messaging与之通信。类似于现在弃用的NPAPI的严厉方法,它在分发时引入了麻烦(你不能将本机模块捆绑在Web Store中,你需要一个单独的安装程序),但最终是最强大的。另请参阅

  5. 从使用原始套接字切换到扩展名随时可用的WebSockets。这仅适用于您希望Chrome启动连接,以及控制服务器(您需要重写)的情况。然而,这是侵入性最小的方法。如果您确实控制了服务器,那么首选。

    或者,您可以编写一个代理服务器来接受WebSocket连接,并代表它与您的普通服务器进行通信。现在我想到了这种类型的现成解决方案。编辑:事实上,there are