如果网址与某些模式匹配,我希望能够激活小部件,但问题是我还想在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!");
});
});
感谢您的帮助!
答案 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
模块。
免责声明:代码示例仅用于使方法更易于理解,尚未经过测试。