我正在尝试使用websocket的onMessage函数,这样当它收到单词“go”时,它将通过当前标签的端口postMessage。当前选项卡ID有效,但我一直收到错误Uncaught TypeError:无法读取未定义的属性'postMessage'。
ws.onmessage = function (evt) {
if(evt.data == "connect"){
rpwd = "helloworld";
ports[curTabID].postMessage({text: rpwd});
}
};
答案 0 :(得分:0)
问题在于我的错误端口和tab.id是同一件事。必须在端口上调用postMessage。我必须添加一个onConnect侦听器来获取打开的任何选项卡的端口。
var ports = {};
function onConnect(port) {
ports[port.sender.tab.id] = port;
}
chrome.extension.onConnect.addListener(onConnect);
之后,我需要知道我当前的标签ID是什么,以便我可以在ports阵列中查找,该数组由onConnect填充。
var curTabID = 0;
chrome.tabs.onSelectionChanged.addListener(function(tabId) {
curTabID = tabId;
});
由此,我能够获得发送postMessage所需的端口信息。
ws.onmessage = function (evt) {
if(evt.data == "connect"){
rpwd = "helloworld";
ports[curTabID].postMessage({text: rpwd});
}
};
我对这段代码非常努力,所以我希望能节省一些时间。