できること
ユーザー JavaScript は訪問したページの一部であるかのように読み込まれ、実行されます。ユーザー JavaScript は、ページ内の最初のスクリプトが実行される直前に実行されます。ページ内にスクリプトが含まれない場合、ユーザー JavaScript はページの読み込みが完了する直前に実行されます。また、ページの DOM が構築されるより先に実行されます。(Greasemonkey スクリプトの実行タイミングはこれと異なりますのでご注意ください。詳細は後述の Greasemonkey スクリプトの例をご参照ください。) ユーザー JavaScript は opera: プロトコルを用いてアクセスされたページでは読み込まれません。初期設定では、https: プロトコルを用いてアクセスされたページでも読み込まれません。
ユーザー JavaScript は、イベントの検出や変数の作成、新たな関数の定義、そのページで補完されている cookie の読み取りなど、通常のスクリプトで可能なことをすべて実現できます。さらにユーザー JavaScript には、拡張関数が幾つか用意されています。拡張関数を用いることで、ページでの読み込みを許可するスクリプトの制御やページ自身のスクリプトの必要に応じた書き換え、ページによるイベント検出の回避、イベントの詳細の書き換え、ページで使用されている変数や関数の上書きができます。
拡張関数を提供するため、 window.opera オブジェクトには次の 4 つのメソッドが用意されています。
- window.opera.defineMagicVariable
- window.opera.defineMagicFunction
- window.opera.addEventListener
- window.opera.removeEventListener
これらについては後に詳説します。注意: これらのメソッドはユーザー JavaScript から呼び出された際にのみ効果があり、ページ内で利用される通常のスクリプトから呼び出された際は無視されます。
ユーザー JavaScript の追加
ユーザー JavaScript を有効にするには、[ ] を開き、ユーザー JavaScript ファイルを保存しているディレクトリを選択します。Opera はディレクトリ内の .js で終わる名前を持つ全てのファイルを読み込み、ユーザー JavaScript ファイルとして扱います。ファイル名が .user.js で終わっている場合、そのファイルは Greasemonkey 記法を使用するものとみなされます。
ユーザー JavaScript をご自身で作成する場合、テキストエディタで JavaScript ファイルを作成し、ユーザー JavaScript ディレクトリに保存します。ファイルは Opera が次にページを読み込む際、自動的に読み込まれます。ユーザー JavaScript の更新や変更の反映に Opera を再起動する必要はありません。
適用できないページでスクリプトが実行されることを回避するために、各々のページを拡張もしくは修正する前にページのアドレスが適用すべきでないページと一致するかをまず確認しましょう。実行に失敗した場合、エラーもしくは動作へ与える重大な影響についての必要事項が確認できます。ページのアドレスを確認する方法は以下に挙げる 2 通り考えられます。
if( location.hostname.indexOf('example.com') != -1 ) {
if( location.href.match(/^http:\/\/example\.com\/resources\//) ) {ページ内のスクリプトとの衝突を避けるため、イベントの検出には DOM の addEventListener メソッドを用いるのが最良です。通常用いられる window.onload = myfunction; などといったイベント登録モデルの使用は推奨されません。イベントハンドラ内では匿名関数を利用することも併せて推奨されます。
いくつかの限定されたページでのみユーザー JavaScript ファイルを実行するように制限する場合、スクリプトファイルの先頭に次のようなコメントブロックを記述します。
// ==UserScript== // @include http://example.com/* // @include http://www.example.com/* // @exclude http://example.com/directory/* // @exclude http://www.example.com/example.html // ==/UserScript==
ページのアドレスを限定するために必要なだけ @include や @exclude 宣言を記述できます。
保護されたページでユーザー JavaScript を使用する
利用者の安全性を確保するため、初期設定では https: プロトコルを用いてアクセスするページでのユーザー javaScript を無効化しています。
保護されたページでもユーザー JavaScript を有効にする場合、ユーザー JavaScript フォルダに置くスクリプトに危険が含まれていないかどうかよく確認してください。利用者以外の書いたスクリプトを利用する場合は特にそれらのスクリプトへ注意を払ってください。この設定を有効にすると、保護されたページでユーザー JavaScript が適用される旨をセッション毎に確認します。
