调用表单tabs.connect(undefined,object)与定义不匹配?

时间:2018-01-04 05:48:12

标签: javascript jquery google-chrome-extension tabs

我正在制作一个简单的Chrome扩展程序,需要让我的popup页面连接到当前标签上的content脚本。但是它一直给我tabId的{​​{1}}参数错误。它说我传递的标签ID是未定义的而不是整数。我不明白为什么。

完全错误:

tabs.connect

我做了一个简短的Uncaught Error: Invocation of form tabs.connect(undefined, object) doesn't match definition tabs.connect(integer tabId, optional object connectInfo) at Object.normalizeArgumentsAndValidate (extensions::schemaUtils:115) at Object.<anonymous> (extensions::binding:363) at connectToCurrentTab (popup.js:21) at HTMLDocument.<anonymous> (popup.js:44) at mightThrow (jquery-3.2.1.js:3583) at process (jquery-3.2.1.js:3651) 来检索当前的标签ID:

function

它似乎获得了正确的标签ID或至少是一个整数。控制台输出:function getCurrentTabId() { var query = {active: true, currentWindow: true}; var tabId; chrome.tabs.query(query, function (tabArray) { tabId = tabArray[0].id; console.log("Tab id: " + tabId); }); return tabId; }

我使用Tab id: 111getCurrentTabId检索到chrome.tabs.connect的当前标签ID到当前标签上运行的popup脚本,然后返回content它连接起来。

Port

非常感谢任何帮助或信息。

1 个答案:

答案 0 :(得分:1)

您的代码几乎是正确的,它比chrome.tabs.query的问题是异步方法。因此,在您致电chrome.tabs.connect - currentTabIdundefined

您可以使用callback函数修复它:

function getCurrentTabId(cb) {
    var query = {active: true, currentWindow: true};
    chrome.tabs.query(query, function (tabArray) {
        console.log("Tab id: " + tabArray[0].id);
        cb(tabArray[0].id)
    });
}

function connectToCurrentTab () {
    getCurrentTabId(function(currentTabId) {
       chrome.tabs.connect(currentTabId, {name: "popup"})
    });
}

您还可以使用Promise来阻止回调地狱。