Javascript 调用表单选项卡。连接(未定义,对象)与定义不匹配?
我正在做一个简单的chrome扩展,需要将弹出页面连接到当前选项卡上的内容脚本。但是,它不断给我一个tabId参数到tabs.connect的错误。这意味着我传递的标签id是未定义的,而不是整数。我不知道为什么 完全错误: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
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"})
});
}