我正在制作一个简单的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: 111
从getCurrentTabId
检索到chrome.tabs.connect
的当前标签ID到当前标签上运行的popup
脚本,然后返回content
它连接起来。
Port
非常感谢任何帮助或信息。
答案 0 :(得分: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
来阻止回调地狱。