如何在我的页面操作弹出窗口中获取当前打开的选项卡的URL?

时间:2012-05-02 12:37:18

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

我想创建一个自动登录服务器的扩展程序。所以我创建了一个后台页面来检查当前的URL,如果它符合我的URL正则表达式,我将显示页面操作图标。点击页面操作,我打开一个带有一些字段的弹出窗口。我需要获取当前打开的URL并将其填入弹出窗口中的一个字段中(例如,当我们单击标准书签页面操作时,URL会自动填充打开的弹出窗口)。如何在Chrome扩展程序中执行此类操作?我尝试了从背景页面到弹出窗口的消息传递,但它无法正常工作。是否可以发送这样的消息?此外,我尝试为弹出的html文件设置onload,但我注意到它没有触发。请建议一种合适的方法来处理这种情况。

2 个答案:

答案 0 :(得分:44)

chrome.tabs.query与以下参数一起使用:

  • queryInfo对象:
    • active: true - 获取有效标签
    • lastFocusedWindow: true - 选择活动窗口
  • 回调功能:
    此函数接收一个参数:匹配选项卡的数组。由于只有一个窗口可以处于活动状态,并且该窗口中有一个选项卡,因此该阵列只有一个元素。此元素是具有Tab signature
  • 的对象

代码段:

// Do NOT forget that the method is ASYNCHRONOUS
chrome.tabs.query({
    active: true,               // Select active tabs
    lastFocusedWindow: true     // In the current window
}, function(array_of_Tabs) {
    // Since there can only be one active tab in one active window, 
    //  the array has only one element
    var tab = array_of_Tabs[0];
    // Example:
    var url = tab.url;
    // ... do something with url variable
});

activeTab权限足以让它发挥作用。

答案 1 :(得分:3)

您还可以使用promises更清晰地检索选项卡:

  getCurrentTab().then(function(tab){
    // Do something w/tab
  });

  function getCurrentTab(){
    return new Promise(function(resolve, reject){
      chrome.tabs.query({
        active: true,               // Select active tabs
        lastFocusedWindow: true     // In the current window
      }, function(tabs) {
        resolve(tabs[0]);
      });
    });
  }