web-dev-qa-db-ja.com

複数のドメインにまたがるGreasemonkeyスクリプトを含む

これは少し奇妙な特定の質問です。

10個のドメインで実行されるGreasemonkeyスクリプトを作成しています。 Webサイトはすべて同じ構造ですが、それぞれのドメイン名は異なります。たとえば、スクリプトは次の場所で実行されます。

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

同じドメイン内の他のページでも実行する必要があるため、これらのドメインの1つのリストは次のようになります。

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

明らかに、10個のドメインすべてにこれらの3つのパスを含める場合、それは@includesとしてリストする必要がある30個のURLです。

だから私は次のようなことをする方法があるかどうか疑問に思っています:

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

このようなことが可能であれば、@includesのリストを30から3に減らします。

それで、これは可能ですか、それとも私は夢を見ていますか?

PS@include http://first-domain.com/*だけで、ifステートメントを使用して、そのドメイン内の特定のパスでスクリプトの特定の部分を実行できますが、スクリプトのページ数はわかります。実行することを目的としているのはサイトの約2%にすぎないため、各Webサイトのすべてのページにスクリプトを含めるのは無駄に思えます。

17
blimpage

参照:

Greasemonkey(Firefox)で機能するソリューションは、ChromeとTampermonkeyでは異なる場合があります。

3つの基本的なアプローチ:

  1. 30の異なる@include行を使用します:これはカットアンドペーストコーディングの観点からは口に合わないかもしれませんが、これは1つのアプローチです。ブラウザ間で同じように機能し、ブラウザのパフォーマンスが最高になります。他のアプローチでは、ブラウザがアクセスしたすべてのページまたはiframeに対して(さらに)チェックを行う必要があります。

  2. 正規表現を使用する@include

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

    これは1行で、かなりうまく機能しますが、行が扱いにくくなる可能性があり、これはGreasemonkeyとTampermonkey(そしておそらくScriptish)でのみ機能します。

  3. @match@include、および@excludeのさまざまな組み合わせを使用します。これは可能性としてのみ言及します。これはストレートChromeで最高のパフォーマンスを発揮するアプローチですが、この種のことにはあまりクロスブラウザではありません。 GreasemonkeyまたはTampermonkeyの場合は、アプローチ1またはアプローチ2を使用します。

ワイルドカードを先頭に置くことはできるだけ避けることをお勧めします。それらはブラウザを最も遅くします。たとえば、回避できる場合は、@include /^.+ .../@include http:/*/*のようなものは使用しないでください。

24
Brock Adams