2012-05-02 43 views
19

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

回答

43

使用chrome.tabs.query以下参数:

  • queryInfo对象:
    • active: true - 为了让活动标签
    • lastFocusedWindow: true - 选择要激活的窗口
  • 回调函数:
    这个函数收到一个argum ent:匹配选项卡的数组。由于只有一个窗口可以处于活动状态,并且此窗口中有一个标签,因此该数组只有一个元素。该元素是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权限是足够的工作。

+0

谢谢你的答案罗布。但现在的问题是,如何在页面操作弹出窗口中运行此操作。我在弹出的HTML文件头部的脚本标记中尝试了这段代码,但是当我打开弹出窗口时它没有执行。无论如何,当弹出窗口打开时,我可以运行它? –

+1

@JophinJoseph确保符合所有条件:1.应在清单文件中设置“tab”[许可](http://code.google.com/chrome/extensions/manifest.html#permissions)。 2.使用内联代码时,请确保['“manifest_version”:2'](http://stackoverflow.com/a/10417745/938089?communication-between-contentscript-js-and-chrome-extension)不存在于清单文件中。 [检查弹出窗口](http://code.google.com/chrome/extensions/tut_debugging.html#inspect-popup)查看是否显示任何错误。 –

+0

谢谢Rob。这解决了我的问题。 –

2

您还可以使用承诺检索选项卡的更清洁的方式:

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]); 
     }); 
    }); 
    } 
相关问题