19

我想创建一个扩展来自动登录到我的服务器。所以我创建了一个背景页面来检查当前的 URL,如果它符合我的 URL 正则表达式,我将显示页面操作图标。单击页面操作时,我将打开一个包含一些字段的弹出窗口。我需要获取当前打开的 URL 并将其填充到弹出窗口中的一个字段中(例如,当我们单击标准书签页面操作时,URL 会自动填充到打开的弹出窗口中)。我怎样才能在 chrome 扩展中做这样的事情?我尝试将消息从后台页面传递到弹出 html,但它不起作用。可以发送这样的消息吗?我还尝试为弹出的 html 文件设置 onload,但我注意到它没有触发。请建议一种合适的方法来处理这种情况。

4

2 回答 2

47

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

  • 查询信息对象:
    • active: true- 获取活动标签
    • lastFocusedWindow: true- 选择活动窗口
  • 回调函数:
    此函数接收一个参数:一组匹配的选项卡。由于只能激活一个窗口,并且该窗口中只有一个选项卡,因此该数组只有一个元素。这个元素是一个带有Tab签名的对象。

代码片段:

// 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权限足以使其正常工作。

于 2012-05-02T15:54:15.807 回答
4

您还可以使用 Promise 以更简洁的方式检索选项卡:

  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]);
      });
    });
  }
于 2015-06-14T01:39:42.490 回答