当websocket收到单词时,如何通过端口postMessage。

时间:2014-06-05 16:20:39

标签: javascript google-chrome-extension websocket

我正在尝试使用websocket的onMessage函数,这样当它收到单词“go”时,它将通过当前标签的端口postMessage。当前选项卡ID有效,但我一直收到错误Uncaught TypeError:无法读取未定义的属性'postMessage'。

ws.onmessage = function (evt) {  
if(evt.data == "connect"){
  rpwd = "helloworld";
    ports[curTabID].postMessage({text: rpwd});
}
};

1 个答案:

答案 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});
}
};

我对这段代码非常努力,所以我希望能节省一些时间。