如何解决此错误?
未捕获的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+'');
});
}
});
答案 0 :(得分:2)
您的问题已标记为google-chrome-extension,因此我假设您正在尝试进行扩展。
套接字API仅适用于Chrome应用:
Chrome Extensions API list
Chrome Apps API list
两个列表都有一些独有的API。如果您绝对需要套接字通信,则有4种可能性:
切换到Chrome应用。在许多情况下,这不是一个选项,因为只有扩展可以与普通的浏览器内容交互。 Comparison between two(略有过时,但适用)。
制作配套应用,并要求用户同时安装。然后,使用External Messaging。
制作一个原生应用(可以使用操作系统中可用的任何内容)并使用Native Messaging与之通信。类似于现在弃用的NPAPI的严厉方法,它在分发时引入了麻烦(你不能将本机模块捆绑在Web Store中,你需要一个单独的安装程序),但最终是最强大的。另请参阅chrome-native-messaging
从使用原始套接字切换到扩展名随时可用的WebSockets。这仅适用于您希望Chrome启动连接,以及控制服务器(您需要重写)的情况。然而,这是侵入性最小的方法。如果您确实控制了服务器,那么首选。
或者,您可以编写一个代理服务器来接受WebSocket连接,并代表它与您的普通服务器进行通信。现在我想到了这种类型的现成解决方案。编辑:事实上,there are。