2013-06-18 5 views
10

Dies ist ein bisschen eine merkwürdig spezifische Frage.Ein Greasemonkey-Skript über mehrere Domänen hinweg einbinden

Ich schreibe ein Greasemonkey-Skript, das über zehn Domänen läuft. Die Webseiten haben alle identische Strukturen, aber der Domain-Name für jeden ist anders. Zum Beispiel wird das Skript auf:

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

Ich brauche es auch auf anderen Seiten über die gleichen Domänen zu laufen, so dass die Liste für nur eine dieser Domains wäre so etwas wie:

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

Offensichtlich, wenn ich diese drei Pfade für alle zehn Domänen einschließe, sind das 30 URLs, die ich als @include s auflisten muss.

Also ich frage mich, ob es einen Weg gibt, etwas wie zu tun:

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

Wenn so etwas wie dies möglich ist, wäre es die Liste der @include s von 30 bis 3.

geschnitten So ist das möglich, oder träume ich?

P.S. Ich weiß, ich kann nur @include http://first-domain.com/* und dann if Anweisungen verwenden, um bestimmte Teile des Skripts auf bestimmten Pfaden innerhalb dieser Domäne auszuführen, aber die Anzahl der Seiten, auf denen das Skript ausgeführt werden soll, ist nur etwa 2% der Website, so dass es scheint verschwenderisch, das Skript auf jeder Seite jeder Website zu enthalten.

Antwort

15

Referenz:

Die Lösungen, die auf Greasemonkey arbeiten (die Firefox ist), kann auf Chrome und auf Tampermonkey unterschiedlich sein.

Drei grundlegende Ansätze:

  1. Verwenden 30 verschiedene @include Linien: Während dies im Hinblick auf die Cut-and-Paste-Codierung ungenießbar sein mag, es ist das ein Ansatz, der die gleiche in allen Browsern funktioniert und derjenige, der die beste Browserleistung haben wird. Die anderen Ansätze erfordern, dass der Browser (mehr) gegen möglicherweise jede besuchte Seite oder Iframe prüft.

  2. einen regulären Ausdruck verwenden @include:

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

    Dies ist eine Zeile und führt ziemlich gut, aber die Linie kann unhandlich bekommen, und dies wird arbeiten nur auf Greasemonkey und Tampermonkey (und wahrscheinlich Skriptisch).

  3. Verwendung verschiedene Kombinationen von @match, @include und @exclude: Ich erwähne dies nur als eine Möglichkeit. Es ist der leistungsstärkste Ansatz für direktes Chrome, aber nicht sehr Cross-Browser für diese Art von Sache. Für Greasemonkey oder Tampermonkey verwenden Sie Approach 1 oder Approach 2.

Ich empfehle Ihnen, so weit wie möglich führende Wildcards zu vermeiden. Sie verlangsamen den Browser am meisten. ZB, verwenden Sie nicht so etwas wie @include /^.+ .../ oder @include http:/*/*, wenn Sie es vermeiden können.

+1

Schön, das ist fantastisch! Ansatz # 2 passt meiner Situation am besten, und ich habe es jetzt perfekt funktioniert. Es ist für ein privates Skript, das nur auf Greasemonkey und Tampermonkey abzielt, also ist die Kompatibilität in Ordnung. Du bist eine Legende! – blimpage

+0

Gern geschehen; froh, dass ich Helfen kann. –