аддон-страничка Firefox - когда URL не совпадает - PullRequest
4 голосов
/ 06 февраля 2012

Я хочу иметь возможность активировать виджет, если URL соответствует некоторому шаблону, но проблема в том, что я также хочу отключить виджет, когда правило Page-mod не соответствует 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 голос
/ 07 февраля 2012

Если я правильно понимаю, что вы пытаетесь сделать, тогда page-mod - неправильное решение - вы просто хотите прослушать активную вкладку.Для этого используйте tabs module , слушайте события 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, вам нужно использовать внутренний 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.

Отказ от ответственности : примеры кода только тамчтобы облегчить понимание подхода, они не были проверены.

...