【问题标题】:My "background.js" code to get the selected chrome tabs url is not working properly in my chrome extension我的“background.js”代码用于获取选定的 chrome 选项卡 url 在我的 chrome 扩展中无法正常工作
【发布时间】:2020-07-24 10:11:34
【问题描述】:

我查看了许多线程,并了解了如何获取焦点 chrome 选项卡的当前 url。但问题是,当我刷新我的扩展程序时,它只输出“chrome://extensions/”,当我点击其他选项卡时,它什么也不做。这是我的代码:

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

而我的权限是这样的

"permissions": [
    "tabs",
    "activeTab"
]

提前致谢。

【问题讨论】:

  • 后台脚本在隐藏的后台页面中运行。它就像一个隐藏的选项卡,有自己的生命周期:它在加载、安装、重新启用扩展程序时运行,或者在后台脚本使用"persistent": false 声明的情况下恢复运行。在后台脚本启动时检索活动选项卡没有任何意义。后台脚本的目的通常是为chrome API 事件注册监听器。当触发此类事件时,其参数通常会包含生成事件的选项卡 ID,因此您甚至不需要检索活动选项卡。
  • 所以你建议我获取像“popup.js”或“content.js”这样的网址?
  • 这取决于扩展的作用。

标签: javascript html google-chrome google-chrome-extension


【解决方案1】:

我假设您在 background.js 中只执行一次查询功能。 尝试监听 onActivated 事件,以便在用户切换选项卡时获取信息。 这是一个例子:

chrome.tabs.onActivated.addListener((activeInfo) => {
    chrome.tabs.query({'active': true, 'lastFocusedWindow': true, 'currentWindow': true}, function (tabs) {
        var url = tabs[0].url;
        console.log(url);
    });
});

编辑: 此时您甚至不需要使用查询。由于您可以访问选项卡 ID,因此可以使用 get 方法。

chrome.tabs.onActivated.addListener((activeInfo) => {
    chrome.tabs.get(activeInfo.tabId, function (tab) {
        console.log(tab.url);
    });
});

【讨论】:

  • 是的,这正是我所需要的。其他线程上没有人提到不断获取网址,提到“onActivated”。现在它就像我想要的那样工作。非常感谢!
  • 你碰巧知道一种方法来收听选项卡上 url 的变化吗?因为是的,这是我问题的答案,但它只是在选项卡更改时获取 url。谢谢
  • @YKerem 尝试使用 onUpdated 事件:developer.chrome.com/extensions/tabs#event-onUpdated
  • 我在这样的更新事件上使用过:'chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { console.log(changeInfo.url); }); ' 它会记录正确的 url,但之后会注销未定义的 5 次。您知道为什么会发生这种情况吗?
  • 标签更新可以有不同的加载状态类型。 “卸载”、“加载”或“完成”。检查if (tab.status === 'complete')
猜你喜欢
  • 2015-04-14
  • 2013-08-28
  • 2013-02-18
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多