Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用表单选项卡。连接(未定义,对象)与定义不匹配?_Javascript_Jquery_Google Chrome Extension_Tabs - Fatal编程技术网

Javascript 调用表单选项卡。连接(未定义,对象)与定义不匹配?

Javascript 调用表单选项卡。连接(未定义,对象)与定义不匹配?,javascript,jquery,google-chrome-extension,tabs,Javascript,Jquery,Google Chrome Extension,Tabs,我正在做一个简单的chrome扩展,需要将弹出页面连接到当前选项卡上的内容脚本。但是,它不断给我一个tabId参数到tabs.connect的错误。这意味着我传递的标签id是未定义的,而不是整数。我不知道为什么 完全错误: Uncaught Error: Invocation of form tabs.connect(undefined, object) doesn't match definition tabs.connect(integer tabId, optional object co

我正在做一个简单的chrome扩展,需要将弹出页面连接到当前选项卡上的内容脚本。但是,它不断给我一个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)
它似乎获得了正确的选项卡id或至少是一个整数。控制台输出:选项卡id:111

我使用getCurrentTabId检索到的当前选项卡id连接到chrome.tabs.connect,从弹出窗口连接到当前选项卡上运行的内容脚本,然后返回其连接的端口

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

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

非常感谢您提供的任何帮助或信息。

您的代码几乎是正确的,问题在于它比chrome.tabs.query更为异步。因此,在调用chrome.tabs.connect-currentTabId时,它是未定义的

您可以使用回调函数进行修复:

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"})
    });
}

您还可以使用来防止回调

解决了我的问题。非常感谢,先生!文档中一定遗漏了异步部分。从我记事起,我就一直在编程,但仍然会犯新手错误P哦,我们每个人都会遇到这种情况。可能是
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"})
    });
}