「@match」パラメーターはワイルドカード「*」に対応 

「Tampermonkey」の「@match」パラメーターは、スクリプトを動作させるページを選択する重要なパラメーターです。 このパラメーターは複数行に分け、つまり複数の「URL」のページに対して設定する事が出来ます。

 

しかし、例えばアメブロの「記事一覧」のリストページで動作させたいが、一般のブログページでは動作させたくない場合、「@match」パラメーターは正規表現が使えませんが、ワイルドカード「*」が使えます。

 

▪ブログ記事の画面
 https://ameblo.jp/user_id/entry-xxxxxxxxxxx.html

▪記事一覧のリストの画面
 https://ameblo.jp/user_id/entrylist-y.html

 

「URL」の中にユーザーによって異なる「user_id」が入って来るので、これは以下のワイルドカードを使った「@match」パラメーターで、動作画面を区別できます。

 

▪ブログ記事の画面
 @match  https://ameblo.jp/*/entry-*

▪記事一覧のリストの画面
 @match  https://ameblo.jp/*/entrylist-*

 

 

 

全サイトを指定する「@match」パラメーター 

 「Tampermonkey」で試作したスクリプトが、色々なサイトで有効かどうかをテストしたい場合に、ワイルドカード「*」を使って「@match」パラメーターを指定すれば良いとまでは、すぐに考え着きます。

(注意:「Tampermonkey」の「@match」指定では、正規表現表記は使えません)

 

前ページでは、ブラウザの表示拡大率を各種ページでテストしたかったのですが、

 

@match     https://*

 

と指定しても無効な設定らしく、「Tampermonkey」が全く動作しません。

 

これは、スクリプトの全サイト指定が無謀なので、出来ない様にプログラムされているのかと思ったのですが、ワイルドカードの扱い次第という事が判りました。

 

以下のページに、とても参考になる情報があります。

 

  @match マッチパターンの書き方 

 

 

以下は、「*」を使った書式を推敲して「ホーム」のページでテストをした結果です。 なお「ホーム」のURL表記を「/」「.」で区分して説明します。

 

 

 ホスト・サブドメイン・ドメイン部 に「*」を使う

ホスト・サブドメイン・ドメイン部は、「https://」の直後の「ホスト」側を「末端側」と考え、そちら側から「*」で省略置換えをします。「*」は「*より以下を略す」配置が規則なので、ドメイン側から「*」を使うと全てエラーになります。 そこで、「www」の側から「*」に置き換える範囲を増やしてテストしています。

 

➀ // @match    https://www.ameba.jp/home ◯ (default)
② // @match    https://*ww.ameba.jp/home ✖
③ // @match    https://ww*.ameba.jp/home ✖
➃ // @match    https://*.ameba.jp/home ◯
➄ // @match    https://*ameba.jp/home ✖
⑥ // @match    https://*.*.jp/home ✖
➆ // @match    https://*.jp/home ◯ 
⑧ // @match    https://*/home ◯ 

 

上の ②~➄の結果を整理すると、

 

②ホスト名の文字列の前方1部を「*」で表記。 ✖

③ホスト名の文字列の後方1部を「*」で表記。 ✖

④ホスト名の全てを「*」で総称した表記。 ◯

➄はホスト名やサブドメイン名の文字列の一部を「*」で表記したとみなされる。 ✖ 

 

となります。 ホスト・サブドメイン・ドメインでは、各名前の文字列の全部を「*」で置き換えるのが規則で、一部を置き換えた表記は無効になります。

 

⑥ホスト名とサブドメイン名を「*」で表記。 ✖

➆ホスト名・サブドメイン名を纏めて「*」で表記。 ◯

⑧ホスト名・サブドメイン名・ドメイン名を纏めて「*」で総称した表記。 ◯

 

⑥~⑧から、ホスト・サブドメイン・ドメイン部では、「*」は1個しか使えない事が判ります。 

 

パスに「*」を使う 

パス(path)部は逆に、右側に向かって「末端側」と考えます。 従って、「*」で置き換える範囲を右から左へ向かって増やしながら、テストしています。

 

➀ // @match    https://www.ameba.jp/home ◯ (default)
② // @match    https://www.ameba.jp/ho* ◯
③ // @match    https://www.ameba.jp/* ◯
➃ // @match    https://www.ameba.jp* ✖
➄ // @match    https://www.ameba.j* ✖ 

 

上の結果を整理すると、

 

②は パス部分の一部を「*」で表記。 ◯

③は パス部分の全部を「*」で総称した表記。 ◯

➃は ドメイン部の一部を「*」で表記したとみなされる。 ✖

➄は④と同じ。

 

パス部を記述するなら、ドメイン部とパス部の境を示す「/」が必要です。(※注)

また、パス文字列の場合は、途中で「*」を使ってそれ以降の省略指定が可能です。 文字列の途中からでも「*」が使えるのは、ホスト・サブドメイン・ドメイン部とは異なります。

 

(※注)適用URLが「https://www.ameba.jp/」の様なドメイン指定のみの場合は、「https://www.ameba.jp/」「https://www.ameba.jp」の両方が有効です。

 

 

全サイトを指定する表記 

以上から、答えがみつかりました。 この書式は「Tampermonkey」の「@match」のテストから得られたもので、他のプログラムには適用できない可能性があります。

 

// @match        http://*/*
// @match        https://*/*

 

この書式は「Tampermonkey」の<新規スクリプト>の「@match」の初期設定に「http://*/*」というヒントを書いてくれていますが、上記のパラメーターはそれに「https://*/*」を追加してより確実にしています。

 

 

全サイトを指定した場合の注意 

少しテストした範囲では、「重大な問題」は生じませんでした。 ただし、前ページのブラウザ拡大率を表示するスクリプトを全サイト指定としてテストすると、通常とは違う事が起こりました。

 

「ホーム」で動作させた場合、「@match  https://www.ameba.jp/home」の適用指定では、スクリプトは1回しか実行されません。 ところが「 http*://*/*」の指定では7回、「 https://*/*」の場合は5回、スクリプトが実行されたと表示されます。

 

 

これは、「ホーム」のページ内にあるiframe等で、スクリプトが適用される(コードの内容上、全く動作しないのですが)ためと思われます。 この適用の動作により、他に有効なスクリプトがある場合は、その動作を一時的に邪魔をする様に見える事がありますが、ページが完全に読まれた段階では正常になる様です。

 

こういう振舞いから、「@match」パラメーターで全サイトを指定するのは、実験的な場合を除いては、控えるのが賢明と思います。