2013-06-18 23 views
10

To trochę dziwne pytanie.W tym skrypt Greasemonkey w wielu domenach

Piszę skrypt Greasemonkey, który będzie działał w dziesięciu domenach. Strony internetowe mają identyczne struktury, ale nazwa domeny dla każdego jest inna. Na przykład, skrypt będzie działał na:

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

również trzeba go uruchomić na innych stronach w tych samych dziedzinach, więc lista dla tylko jednej z tych dziedzin byłoby coś jak:

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

Oczywiście, jeśli uwzględniam te trzy ścieżki dla wszystkich dziesięciu domen, należy podać 30 adresów URL jako @include.

Więc zastanawiam się, czy jest jakiś sposób, żeby zrobić coś takiego:

// 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 

Jeśli coś jak to możliwe, byłoby wyciąć listę @include s od 30 w dół do 3.

So czy to możliwe, czy też śnię?

P.S. Wiem, że mogę tylko @include http://first-domain.com/*, a następnie użyć instrukcji if do uruchomienia niektórych części skryptu na niektórych ścieżkach w tej domenie, ale liczba stron, na których skrypt ma działać, wynosi tylko około 2% witryny, więc wydaje się marnotrawstwem, aby uwzględnić skrypt na każdej stronie każdej witryny.

Odpowiedz

15

odniesienia:

rozwiązania, które działają na Greasemonkey (który jest Firefox), może być różne w Chrome i Tampermonkey.

trzy podstawowe podejścia:

  1. używać 30 różnych @include linie: Choć może to być niesmaczny w zakresie cięcia i wklejania kodowania, to jest jedno podejście, które działają tak samo w różnych przeglądarkach i ten, który będzie miał najlepszą wydajność przeglądarki. Inne podejścia wymagają od przeglądarki wykonania (więcej) sprawdzeń na potencjalnie każdej odwiedzonej stronie lub elemencie iframe.

  2. Użyj regex @include:

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

    To jedna linia i wykonuje dość dobrze, ale linia może dostać nieporęczny, a to działać tylko na Greasemonkey i Tampermonkey (i prawdopodobnie Scriptish).

  3. stosować różne kombinacje @match, @include i @exclude: ja tylko wspomnieć to jako możliwość. Jest to najlepiej działające podejście do zwykłej przeglądarki Chrome, ale nie jest przeznaczone na tego rodzaju rzeczy. W przypadku Greasemonkey lub Tampermonkey należy zastosować podejście 1 lub podejście 2.

Zalecam, aby unikać prowadzenia symboli wieloznacznych tak bardzo, jak to możliwe. Najbardziej spowalniają przeglądarkę. Np. Nie używaj czegoś takiego jak @include /^.+ .../ lub @include http:/*/*, jeśli możesz tego uniknąć.

+1

Piękny, jest fantastyczny! Podejście nr 2 najlepiej pasuje do mojej sytuacji, a teraz działam idealnie. Jest przeznaczony do prywatnego skryptu, którego celem jest tylko Greasemonkey i Tampermonkey, więc zgodność jest w porządku. Jesteś legendą! – blimpage

+0

Nie ma za co; miło, że mogłem pomóc. –

Powiązane problemy