Създайте запис в контекстното меню за всички уебсайтове, с изключение на някои

Разработвам добавка за 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 ха-ха. Не се задълбочих много, но регулярният ми израз се провали, така че веднага се отказах, ха-ха.   -  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