将当前选项卡URL传递给弹出窗口

时间:2014-03-07 16:20:10

标签: firefox-addon crossrider

我在StackOverflow上尝试了以下代码教程,并且无法在弹出窗口中实际收到活动标签页。

http://stackoverflow.com/questions/21043684/sending-data-from-popup-to-extension-js-not-working

http://stackoverflow.com/questions/21017681/how-to-send-data-from-popup-script-to-background-js-in-crossrider

我的目标是,只要用户在该标签上,就会在弹出窗口中收到活动标签页。此URL是对数据的引用,需要从数据库中获取,因此对我的插件至关重要。

如果可以展示一个工作实例,我将非常感激。

修改

我现在可以在更改标签或更改网址时在网站的弹出窗口中获取URL。但是,这对我没有用,因为我在用户单击弹出窗口时需要URL,这样我就可以获取活动选项卡的URL并对本地数据库运行查询以获取数据。 我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

我不确定如何在SDK中执行此操作。

但你想要做的是添加一个TabSelect事件监听器。

这是在bootstrap或overlay addons中完成的。

function exampleTabSelected(event) {
  //tab was selected
  var tab = event.target; //this tab is the actual thingy you click in the tab bar at top
  var tabBrowser = tab.linkedBrowser; //this is the chrome browser within this tab
  var tabContentWindow = tabBrowser.contentWindow; //this is the HTML (or whatever type) contained inside the tab, this is where your website is
  var siteLocationObj = tabContentWindow.location;
  //location now includes properties like href, host, pathname, hash, and port
  //now put your the id of your id of the panel and you can do whatever to it
  var chromeWindow = tab.ownerGlobal; //this is the firefox browser window that the tab is in
  chromeWindow.document.getElementById('YOUR-PANEL-ID-HERE').querySelector('iframe').contentDocument.innerHTML = 'you are now on page: ' siteLocationObj.href;
}

// During initialisation
var container = gBrowser.tabContainer;
container.addEventListener("TabSelect", exampleTabSelected, false);

// When no longer needed
//container.removeEventListener("TabSelect", exampleTabSelected, false);

答案 1 :(得分:1)

@infosec通常,在弹出范围中,您无法直接确定选项卡何时变为活动状态。但是,在后台作用域中,您可以使用Crossrider appAPI.tabs.onTabSelectionChanged方法获取活动选项卡信息,然后使用appAPI.message.toPopup将信息发送到弹出窗口。

实现此目的的代码如下所示:

<强> background.js

appAPI.ready(function($) {
    // Get the Active Tab information
    appAPI.tabs.onTabSelectionChanged(function(tabInfo) {
        // Send it to the popup
        appAPI.tabs.toPopup({tabInfo: tabInfo});
    });
});
popup.html 中的

crossriderMain

function crossriderMain($) {
    appAPI.message.addListener(function(msg) {
        // Do something with the tab URL
        console.log('ActiveTab URL is ' + msg.tabInfo.tabUrl);
    });
}

[披露:我是Crossrider员工]