Firefox插件页面模块 - 当URL不匹配

4
我希望能够在URL匹配某些模式时激活小部件,但问题是当页面修改规则不匹配该URL时,我也想禁用小部件。因此,如果我打开了几个标签,并且在它们之间切换,如果活动选项卡的URL不匹配规则,则应该能够以某种方式禁用小部件,或者在其他情况下激活它。小部件的状态(开/关)应在加载页面和通过选项卡进行切换时更改。
我已经苦苦挣扎了一段时间,但仍然没有找到解决方案。
目前我的进展如下:
// 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个回答

1
如果我正确理解你想做什么,那么page-mod是错误的解决方案 - 你只需要监听当前标签页。 使用tabs 模块,监听 ready (新 URL 加载) 和 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中指定的那样的模式,那么您需要使用内部{{link1:match-pattern模块}},就像这样:

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模块。

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


是的,那正是我想做的,而且我在此期间已经想出来了 :D.. 谢谢你的帮助! - node37

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接