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

问题描述 投票:0回答:1

我正在制作一个简单的chrome扩展,需要让我的popup页面连接到当前选项卡上的content脚本。然而它一直给我tabId tabs.connect论证的错误。它说我传递的标签ID是未定义的而不是整数。我不知道为什么。

完全错误:

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)

我做了一个简短的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;
}

它似乎是获取正确的选项卡ID或至少是一个整数。控制台输出:Tab id: 111

我使用getCurrentTabId检索到的当前标签ID从chrome.tabs.connectpopup到当前标签上运行的content脚本然后返回它连接的Port

function connectToCurrentTab () {
    var currentTabId = getCurrentTabId();

    return chrome.tabs.connect(currentTabId, {name: "popup"}); //<-- error thrown here
}

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

javascript jquery google-chrome-extension tabs
1个回答
1
投票

你的代码几乎是正确的,它比chrome.tabs.query的问题是异步方法。所以,在你打电话给chrome.tabs.connect - currentTabId时,它是undefined

您可以使用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来防止回调地狱。

© www.soinside.com 2019 - 2024. All rights reserved.