我有一个回调函数,应该搜索给定网址的所有标签,如果它打开则导航到该标签,如果它没有打开则应该打开它。
我有以下查询检查url的选项卡
chrome.tabs.query({url: destination}, function (result) {
//If it found no results then the page is not open
if(result == null) {
console.log(destination + " not found in tabs. Function will open Tab.")
//Appropriate function...
}
//If it's open, the function will switch to the tab instead.
else {
//Use the tab ID of the first result
var tabID = result[0].id;
//Appropriate function using id to open tab
}
问题是结果总是为null或未定义,并且永远不会返回数组(即使在目标==" http://*/*")我最初有if(result.length == 0) )但它会给出与类型相关的错误
我也尝试过使用
chrome.tabs.update(tabID, {
selected: true
});
切换到标签,但这不起作用。我想这可能是因为我需要将它放在background.js页面中,但我无法从此页面调用它。
chrome.extension.getBackgroundPage().myFunction();
不起作用。
编辑:
您提到了导致空字符串的权限。这可能就是答案,但我确实在权限中设置了标签。这些是我在清单中的权限:
"permissions": [
"storage",
"notifications",
"activeTab",
"tabs",
"bookmarks",
"browsingData",
"identity",
"topSites",
"history"
]
答案 0 :(得分:1)
这基本上是关于 chrome.tabs.query 的问题。
此方法将对象作为第一个参数。可以使用以下模式之一将名为“url”的属性设置为字符串。结果将是一个包含所有标签的数组,其中url与模式匹配。
注意:除非您在清单中指定了“tabs”权限,或者与返回的url值匹配的域,否则任何返回的TabObjects的url属性都将为空字符串。
示例查询:
*:// * / * 将返回所有标签
http://*/* 将返回带有http协议的所有标签
http://www.google.com/* 将返回包含http协议和域名www.google.com的所有标签
虽然这些模式可能会提醒您正则表达式,但它们并不相同。此查询中的最后一个星号始终表示出现0次以上。
请注意,您无法使用模式*://*.google.com/*搜索google.com的所有子域。
我还要注意,您可以为要搜索的url属性提供一系列模式。
以下是一个例子:
chrome.tabs.query( { "url":[
"*://music.google.com/*", // copy this from manifest.json is better idea
"*://video.google.com/*"
] }, function( tabs ){
if( tabs.length ){ /* tabs[ 0 ].url is blank depending on permissions */ }
} )