Chrome扩展程序获取新选择的标签的网址

时间:2014-05-01 22:36:12

标签: javascript google-chrome google-chrome-extension event-listener

我有一个扩展程序,可以使用chrome.tabs.onUpdated事件侦听器检测每次更改网页的时间。此事件侦听器中的代码根据页面URL执行某些任务。我还希望在从一个选项卡切换到另一个选项卡时执行这些任务,但这不会触发chrome.tabs.onUpdated事件侦听器,因此我会使用chrome.tabs.onActivated监听选项卡更改。

问题是使用chrome.tabs.onActivated没有给我我刚刚切换到的标签的URL,这是我需要的。有人可以帮我吗?

由于

2 个答案:

答案 0 :(得分:7)

您有2个选择:


  1. 使用两个事件(不太好):

    另外 到您已经 ALREADY 用于其他功能的chrome.tabs.onUpdated事件(您在上面描述) ),您也可以使用 chrome.tabs.get 方法从 tabId 的事件对象中抓取onActivated,然后传递给一个函数。但是,在这种情况下,恕我直言选项2对你来说是更好的选择:

        chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
          //... whatever other stuff you were doing anyway
        });
    
        chrome.tabs.onActivated.addListener(function(evt){ 
          chrome.tabs.get(evt.tabId, function(tab){ 
            alert(tab.url);  //the URL you asked for in *THIS QUESTION*
          }); 
        });
    
  2. 仅使用 onUpdated 事件一次(更好):

    在同一事件中,同时处理您的其他内容和您正在寻找的内容:

        chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
          //... whatever other stuff you were doing anyway
          chrome.tabs.getSelected(null, function(tab) {
            alert(tab.url);  //the URL you asked for in *THIS QUESTION*
          });
        });
    
  3. 当然,不要忘记:


    您的manifest.json文件应具有" 标签权限":

      {
        "name": "My extension",
        ...
        "permissions": [
          "tabs"
        ],
        ...
      }
    

答案 1 :(得分:0)

您在使用chrome.tabs.onActivated时有正确的想法。当您获得onActivated的事件时,您还应该获取activeInfo对象,该对象应包含选项卡ID。有了这个,你可以做chrome.tabs.get(),传入那个tab标签,传递给chrome.tabs.get()回调的tab对象应该包含URL(虽然注意你需要&# 34;制表符"清单中的权限以获取URL。