Включая Greasemonkey script через несколько доменов

Это немного странный вопрос.

Я пишу Greasemonkey script, который будет работать через десять доменов. Все веб-сайты имеют одинаковые структуры, но имя домена для каждого отличается. Например, script будет работать:

http://first-domain.com/
http://another-one.com/
http://you-get-the-point.com/

Мне также нужно, чтобы он запускался на других страницах через одни и те же домены, поэтому список только для одного из этих доменов был бы таким:

http://first-domain.com/admin/edit/*
http://first-domain.com/blog/*
http://first-domain.com/user/*/history

Очевидно, что если я включаю эти три пути для всех десяти доменов, то 30 URL-адресов, которые мне нужно указать как @include s.

Так что мне интересно, есть ли способ сделать что-то вроде:

// Obviously fake code:

var list_of_sites = ["first-domain", "another-one", "you-get-the-point"];

@include http:// + list_of_sites[any] + .com/admin/edit/*
@include http:// + list_of_sites[any] + .com/blog/*
@include http:// + list_of_sites[any] + .com/user/*/history

Если возможно что-то подобное, он сократит список @include от 30 до 3.

Так возможно ли это, или мне снится?

PS Я знаю, что могу просто @include http://first-domain.com/*, а затем использовать операторы if для запуска определенных частей script по определенным путям внутри этого домена, но количество страниц, которые script предназначен для работы только около 2% сайта, поэтому представляется бесполезным включать script на каждую страницу каждого веб-сайта.

Ответ 1

Ссылка:

Решения, которые работают на Greasemonkey (который является Firefox), могут отличаться от Chrome и Tampermonkey.

Три основных подхода:

  • Используйте 30 различных строк @include. Хотя это может быть неприятным с точки зрения кодирования с вырезанием и вставкой, это единственный подход, который будет работать одинаково во всех браузерах и который будет иметь лучшую производительность браузера. Другие подходы требуют, чтобы браузер выполнял (более) проверки против возможной посещения каждой страницы или iframe.

  • Используйте регулярное выражение @include:

    @include /^http:\/\/(1stDomain\.com|2ndDomain\.com|3rdDomain\.net|etc.)\/(admin\/edit|blog|user\/.+?\/history)/
    

    Это одна строка и работает достаточно хорошо, но строка может стать неудобной, и это будет работать только с Greasemonkey и Tampermonkey (и, вероятно, с Scriptish).

  • Используйте различные комбинации @match, @include и @exclude. Я упоминаю это как возможность. Это самый эффективный подход к прямому Chrome, но не очень кросс-браузер для такого рода вещей. Для использования подхода Greasemonkey или Tampermonkey 1 или подхода 2.

Я рекомендую вам максимально избегать подстановочных знаков. Они замедляют работу браузера. EG, не используйте что-то вроде @include /^.+ .../ или @include http:/*/*, если вы можете его избежать.