Создать запись контекстного меню для всех веб-сайтов, за исключением некоторых

Я разрабатываю надстройку Firefox с помощью Addon SDK, в которой я хотел бы содержать запись контекстного меню для изображений на всех веб-сайтах, кроме изображений Google, для которых я добавлю другую запись контекстного меню.

var cm = require("sdk/context-menu");

cm.Item({
  label: "LABEL",
  context: [
    cm.URLContext(["*.images.google.*"]),
    cm.SelectorContext("img")
  ],
  contentScript: googleContentScript ,
  onMessage: ...
});

cm.Item({
  label: "LABEL",
  context: [
     cm.URLContext(["*"]),
     cm.SelectorContext("img")
  ],
  contentScript: otherContentScript ,
  onMessage: ...
});

Для первого URLContext я хотел бы поймать все изображения Google независимо от TLD (.com, .co.uk...). А для второго я хотел бы, чтобы URLContext применялся ко всем URL-адресам, которых нет в первом.

Очевидно, что это не то, что происходит в настоящее время. Любая помощь будет оценена по достоинству.


person RELnemtzov    schedule 23.06.2014    source источник
comment
Принимает ли URLContext RegEx? Если это так, дайте мне знать, и я могу вам помочь   -  person Noitidart    schedule 24.06.2014
comment
@Noitidart, это поддерживает несколько ограниченный регулярное выражение с полным соответствием. Но если вы так стремитесь помочь, почему вы сами не заглянули в документы?   -  person nmaier    schedule 24.06.2014
comment
Я ломаю голову над этим, верно здесь. Если я это сделаю, это поможет еще тысячам людей, так что у меня больше мотивации :P haha. Я не слишком вникал в это, но мое регулярное выражение потерпело неудачу, поэтому я быстро сдался, ха-ха.   -  person Noitidart    schedule 24.06.2014


Ответы (1)


шаблоны соответствия для URLSelector несколько ограничены, и с ними трудно иметь дело, когда дело доходит до негативных шаблонов.

У вас есть разумные варианты:

  • Вы внедряете self.on("context", function() ...) в свой контент-скрипт. Возврат false приведет к тому, что пункт меню не будет отображаться.

Специальное событие с именем «контекст» генерируется в ваших сценариях контента каждый раз, когда должно быть показано контекстное меню. Если вы зарегистрируете функцию прослушивателя для этого события и она вернет значение true, в меню будет показан пункт меню, связанный со сценарием содержимого прослушивателя.

  • Если вы ориентируетесь на Firefox 29+, используйте PredicateContext может быть проще (в обслуживании), а также обеспечивать более высокую производительность (поскольку не нужно инициировать и выполнять сценарий содержимого).
person nmaier    schedule 24.06.2014
comment
спасибо :) я вроде как наполовину пытался прикрыть тебя, но не смог :P - person Noitidart; 24.06.2014
comment
@nmaier, значит, вы говорите, что я не должен использовать URLContext и вместо этого проверять домены Google в сценарии контента Google в функции self.on("context", function() ...), возвращая true для страниц Google и false в противном случае. В то время как другой сценарий содержимого будет таким же, но будет возвращать противоположные значения? - person RELnemtzov; 24.06.2014
comment
Если шаблон Google можно легко преобразовать в действительный URLContext, я бы использовал его, прежде чем он станет более эффективным. Прямо сейчас он содержит несколько подстановочных знаков, поэтому он не совсем действителен (подойдет регулярное выражение). Да для другого шаблона: используйте self.on("context", ...) или PredicateContext - person nmaier; 24.06.2014