0

我正在尝试构建一个 Chrome 扩展程序,它将检查(通过“链接:URL”Google 搜索)哪些站点链接到当前在活动选项卡中打开的站点。但是我的代码未能正确地将选项卡的 URL 保存到变量中。我在 stackoverflow 上找到了类似的问题(及其答案),我知道这可能与 js 是异步的这一事实有关,但我无法使其工作。任何提示将不胜感激。谢谢!

// this is the part that doesn't work

chrome.tabs.query({'active': true}, function (tabs) {
  var query = tabs[0].url;
  });

// this is the part that works just fine

chrome.browserAction.onClicked.addListener(function(activeTab)
{

    var stemURL = "http://www.google.com/#q=link:";
    chrome.tabs.create({ url: (stemURL + query) });
});

这是我在清单中设置权限的方式,应该是正确的

"permissions": [
    "tabs", "http://*/*", "https://*/*"
  ],
4

1 回答 1

0

这是因为当您声明“查询”变量时,它仅在 chrome.tabs.query 中的回调函数中具有作用域。现在,您可以在脚本顶部声明您的变量,以便在整个脚本中赋予它范围:

var query;
chrome.tabs.query({'active': true}, function (tabs) {
  query = tabs[0].url;
  });
chrome.browserAction.onClicked.addListener(function(activeTab)
{
    var stemURL = "http://www.google.com/#q=link:";
    chrome.tabs.create({ url: (stemURL + query) });
});

...或者您可以使用 chrome.browserAction.onClick 传递给您的 activeTab 变量并从中获取活动选项卡的 URL,以确保您打开用户单击扩展程序按钮时正在查看的选项卡的搜索结果,这也将具有剪切代码前半部分的额外优势:

chrome.browserAction.onClicked.addListener(function(activeTab)
{
    var stemURL = "http://www.google.com/#q=link:";
    chrome.tabs.create({ url: (stemURL + activeTab.url) });
});

我会推荐后一种方法;它更快、更干净、更可靠。祝你好运!

于 2013-06-26T01:49:08.500 回答