我正在制作一个简单的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.connect
到popup
到当前标签上运行的content
脚本然后返回它连接的Port
。
function connectToCurrentTab () {
var currentTabId = getCurrentTabId();
return chrome.tabs.connect(currentTabId, {name: "popup"}); //<-- error thrown here
}
非常感谢任何帮助或信息。
你的代码几乎是正确的,它比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
来防止回调地狱。