firefox addon page-mod - 当url不匹配时

时间:2012-02-06 11:45:03

标签: firefox firefox-addon firefox-addon-sdk

如果网址与某些模式匹配,我希望能够激活小部件,但问题是我还想在page-mod规则与网址不匹配时禁用小部件。 因此,如果我打开几个标签,如果我在它们之间切换,我应该能够以某种方式禁用小部件,如果活动标签的网址与规则不匹配,或者在其他情况下激活它。在加载页面和切换选项卡时,应更改窗口小部件的状态(开/关)。

我一直在努力解决这个问题,但仍未找到解决方案。

这就是我现在所处的位置:

// Activates on matching one of the site domains, but I also want to deactivate
// it when it does not match 
var pageMod = require("page-mod");
pageMod.PageMod({
    include: ["*.site1.com","*.site2.com"], 
    onAttach: function() {
        alert("Widget activated!");
    });
});

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果我理解你正在尝试做什么,那么page-mod是错误的解决方案 - 你只想听取活动标签。使用tabs module,听取ready(已加载新网址)和activate(活动标签已更改)事件:

var tabs = require("tabs");
tabs.on("ready", function(tab)
{
  if (tab == tabs.activeTab)
    updateActiveTab(tab);
});
tabs.on("activate", function(tab)
{
  updateActiveTab(tab);
});

您的updateActiveTab()函数需要检查tab.url然后激活或停用小部件。如果您想使用与page-mod指定的模式类似的模式,那么您需要使用内部match-pattern module,如下所示:

var {MatchPattern} = require("match-pattern");
var patterns = [
  new MatchPattern("*.site1.com"),
  new MatchPattern("*.site2.com")
];

function updateActiveTab(tab)
{
  var matches = false;
  for (var i = 0; i < patterns.length; i++)
    if (patterns[i].test(tab.url))
      matches = true;
  if (matches)
    activateWidget();
  else
    deactivateWidget();
}

但是当然你可以使用正则表达式或类似的东西来测试tab.url,你不必使用match-pattern模块。

免责声明:代码示例仅用于使方法更易于理解,尚未经过测试。

相关问题