使用可能なメソッドとイベント
- window.opera.defineMagicVariable
- window.opera.defineMagicFunction
- window.opera.addEventListener
- window.opera.removeEventListener
- window.opera.setOverrideHistoryNavigationMode
- window.opera.getOverrideHistoryNavigationMode
window.opera.defineMagicVariable
このメソッドは、ユーザー JavaScript から通常のスクリプトによって定義されたグローバル変数を上書きする際に用います。この関数には次の 3 つの仮引数を与えます。
- Name
- 上書きする関数名を示す文字列。
- Getter
- スクリプトが変数の内容へアクセスするたびに実行される関数。この関数の返値は全て変数の値として用いられます。この関数へは、変数が実行時点で保持している値を保持する引数が 1 つ渡されます。
- Setter
- 任意指定。スクリプトが変数の値を設定しようとするたびに実行される関数。この関数へは、スクリプトが変数に割り当てようとしていた値を保持する引数が 1 つ渡されます。Setter 関数が不要の場合、代わりに
null値を用いねばなりません。
例:
window.opera.defineMagicVariable(
'isGoodBrowser',
function (curVal) { return true; },
function (newVal) { if(!newVal) { window.status = 'Repairing script'; } }
);window.opera.defineMagicFunction
このメソッドは、ユーザー JavaScript から通常のスクリプトによって定義されたグローバル関数を上書きする際に用います。この関数には次の 2 つの仮引数を与えます。
- Name
- 上書きする関数名を示す文字列。
- Implementation
- ページ内で定義された関数の代わりに実行される関数。この関数へは、以下の引数が渡されます。
- ページ内で定義された実際の関数への参照
- 実際の関数において「this」キーワードを利用した際に参照されるオブジェクト
- 実際の関数へ渡された全ての引数 (引数はそれぞれ magic 関数へ個別の引数として渡されます)。
例:
window.opera.defineMagicFunction(
'getLayer',
function ( oRealFunc, oThis, oParam1, oParam2 ) {
return oParam1.getElementById('oParam2').style;
}
);この例では関数「f」を上書きします。「this」オブジェクトが window オブジェクトを参照する場合、この関数は false を返します。そうでない場合、実際の関数を実行します。
window.opera.defineMagicFunction(
'f',
function( real, thisObject ) {
if( thisObject == window ) {
return false;
} else {
return real.apply( thisObject, arguments.slice(2) );
}
}
);window.opera.addEventListener
ユーザー JavaScript イベントのリスナーを追加する際に用いる一般的なメソッドです。イベントが検出されると、イベントハンドラへ UserJSEvent オブジェクトが渡されます (window.event からも検出できます)。 UserJSEvent オブジェクトは通常のイベントプロパティに加え、「element」や「event」、「listener」、「eventCancelled」、「propagationStopped」、「source」、「returnValue」プロパティに対しても存在します。ただし、これらは検出されたイベントタイプに依存します。「preventDefault」を使用してキャンセルできるイベントもあります。また、これを用いてスクリプトやイベントハンドラが実行されるのを防ぐこともできます。
ユーザー JavaScript イベントのリスナユーザー JavaScript ファイル内のどこにでも追加できます。リスナは通常のイベント用のハンドラ関数や、タイマーによって有効化されるスクリプトでは追加できません。検出できるイベントは以下の通りです。
- BeforeExternalScript
- SRC 属性を持った SCRIPT 要素が見つかった際に発生します。script 要素は UserJSEvent の element プロパティとして利用できます。キャンセルされた場合、外部ソースは読み込まれず、script 要素も実行されません。また、キャンセルされた場合 BeforeScript イベントは発生しません。
- BeforeScript
- SCRIPT 要素が実行される前に発生します。script 要素は UserJSEvent の element プロパティとして利用できます。スクリプトの内容は script 要素の text プロパティとして利用できます。また、その内容は次のように書き換えることもできます。
UserJSEvent.element.text = UserJSEvent.element.text.replace(/!=\s*null/,'');BeforeScript イベントは外部スクリプトと同様にインラインスクリプトに対しても発生します。これには Opera が通常実行できない VBScript などといったスクリプトも含まれます。キャンセルされた場合、script 要素は実行されません。 - AfterScript
- SCRIPT 要素の実行完了後に発生します。script 要素は UserJSEvent の element プロパティとして利用できます。
- BeforeEvent
- イベントハンドラによってイベントが処理されるか否かにかかわらず、通常のイベントが発生する前に必ず発生します。通常のイベントは UserJSEvent の attribute プロパティとして利用できます。キャンセルされた場合、通常のイベントは実行されず、デフォルトの動作が行われます。また、BeforeEventListener イベントに関連する全てのイベントも発生しません。
- BeforeEvent.type
- BeforeEvent とほぼ同じですが、BeforeEvent.click のようにイベントの種類を指定することで、対象を特定種類のイベントに限定することができます。Opera 8 では、BeforeEvent.type にリスナが登録されているイベントが発生した場合、BeforeEvent イベントは発生しません。Opera 9 では、リスナ登録されているか否かにかかわらず、両方のイベントが発生します。
- AfterEvent
- 通常のイベントが発生してその処理が完了した後、デフォルトの動作が行われる前に発生します。通常のイベントは UserJSEvent の attribute プロパティとして利用できます。キャンセルされた場合、通常のイベントハンドラを用いて通常のイベントをキャンセルすることはできません。UserJSEvent オブジェクトは、通常のイベントハンドラがイベントをキャンセルした場合に true が設定される eventCancelled プロパティを持っています。
- AfterEvent.type
- AfterEvent とほぼ同じですが、AfterEvent.click のようにイベントの種類を指定することで、対象を特定種類のイベントに限定することができます。Opera 8 では、AfterEvent.type にリスナが登録されているイベントが発生した場合、AfterEvent イベントは発生しません。Opera 9 では、リスナ登録されているか否かにかかわらず、両方のイベントが発生します。
- BeforeEventListener
- 通常のイベントリスナが呼び出される前に実行されます。通常のイベントは UserJSEvent の event プロパティとして、呼び出されたイベントリスナは listener プロパティとして利用できます。キャンセルされた場合、通常のイベントリスナは呼び出されません。
- BeforeEventListener.type
- BeforeEventListener とほぼ同じですが、BeforeEventListener.click のようにイベントの種類を指定することで、対象を特定種類のイベントに限定することができます。Opera 8 では、BeforeEventListener.type にリスナが登録されているイベントが発生した場合、BeforeEventListener イベントは発生しません。Opera 9 では、リスナ登録されているか否かにかかわらず、両方のイベントが発生します。
- AfterEventListener
- 通常のイベントリスナが呼び出された後に実行されます。通常のイベントは UserJSEvent の event プロパティとして、呼び出されたイベントリスナは listener プロパティとして利用できます。キャンセルされた場合、通常のイベントハンドラを用いて通常のイベントの伝播をキャンセルすることはできません。UserJSEvent オブジェクトは、通常のイベントハンドラがイベントの伝播をキャンセルした場合に true が設定される propagationStopped プロパティを持っています。
- AfterEventListener.type
- AfterEventListener とほぼ同じですが、AfterEventListener.click のようにイベントの種類を指定することで、対象を特定種類のイベントに限定することができます。Opera 8 では、AfterEventListener.type にリスナが登録されているイベントが発生した場合、AfterEventListener イベントは発生しません。Opera 9 では、リスナ登録されているか否かにかかわらず、両方のイベントが発生します。
- BeforeJavascriptURL
- javascript: URL が実行される前に発生します。実行される JavaScript コード (URL 中の「javascript:」以降全て) は UserJSEvent の source プロパティとして利用できます。また、その内容は書き換えることもできます。キャンセルされた場合、javascript: URL は実行されません。
- AfterJavascriptURL
- javascript: URL が実行された後に発生します。実行された JavaScript コード (URL 中の「javascript:」以降全て) は UserJSEvent の source プロパティとして、全ての返値は returnValue プロパティとして利用できます。returnValue は書き換えることもできます。キャンセルされた場合、返値が新しいページのソースとして利用されることはありません。
window.opera.removeEventListener
window.opera.addEventListener を用いて追加したユーザー JavaScript のイベントリスナを削除する際に用います。匿名関数として追加されたイベントリスナに対して用いることはできません。詳細は W3C DOM Level 2 Events - Event registration interfaces specification をご覧ください。
window.opera.setOverrideHistoryNavigationMode
このメソッドは、ユーザー JavaScript から現在の文書に Opera が使用すべき履歴間ナビゲーションモードを設定する際に用います。この間数には次の 1 つの仮引数を与えます。
- Mode
- 「automatic」か「fast」か、いずれかの値を取ります。
詳細はナレッジベースの記事をご覧ください。
window.opera.getOverrideHistoryNavigationMode
setOverrideHistoryNavigationMode によって現在の文書に設定された、履歴間ナビゲーションモードの最後の設定値を読み出します。初期値は「automatic」です。
UserJSEvent オブジェクト
ユーザー JavaScript のイベントハンドラ関数へ渡された event オブジェクトです。これは window.event からも取得できます。通常の event オブジェクトプロパティと同様、ユーザー JavaScript のイベント特有のオブジェクトが定義されています。currentTarget や srcElement、window.opera を参照する全ての target プロパティなど、多くのプロパティはユーザー JavaScript において利用目的が限られます。しかし一方、以下に挙げるプロパティやメソッドは非常に有益です。
- element
- [オブジェクト型 (読み取り専用)] script 要素。getAttribute や setAttribute といった通常利用される全ての DOM メソッドを全て使用できます。「BeforeExternalScript」と「BeforeScript」、「AfterScript」イベントにて使用できます。
- element.text
- [文字列型 (読み書き可能)] 実行される文字。「BeforeScript」と「AfterScript」イベントにて使用できます。通常のページで利用されるスクリプトとは異なり、ユーザー JavaScript は、現在のページと同一ドメイン下のスクリプトに限らず、いかなるドメイン下のスクリプトのソースをも閲覧することができます。
- event
- [オブジェクト型 (読み取り専用)] 通常のイベントオブジェクト。「BeforeEvent」と「AfterEvent」イベントにて使用できます。
- eventCancelled
- [真偽値 (読み取り専用)] イベントハンドラがイベントをキャンセルした場合に真となる。「AfterEvent」イベントにて使用できます。
- listener
- [関数 (読み取り専用)] イベントハンドラ関数への参照。「BeforeEventListener」と「AfterEventListener」イベントにて使用できます。
- preventDefault
- [関数 (読み取り専用)] デフォルトの動作を阻止する。たとえばスクリプトが実行されるのを防いだり、発生したイベントを阻止したり、イベントハンドラによってフォームの送信が妨げられるのを回避したりすることができます。全てのイベントにて使用できますが、「AfterScript」イベントへ使用しても効果はありません。
- propagationStopped
- [真偽値 (読み書き可能)] イベントハンドラがイベントの伝播を止めた場合に真となる。「AfterEventListener」イベントにて使用できます。
- returnValue
- [文字列型 (読み書き可能)] スクリプトの返値。「AfterJavascriptURL」イベントにて使用できます。
- source
- [文字列型 (読み書き可能)] 実行されようとしているもしくは実行が完了したスクリプトのソース。「BeforeJavascriptURL」と「AfterJavascriptURL」イベントにて使用できます。
- type
- [文字列型 (読み取り専用)] 検出されたイベントの種類。「BeforeJavascriptURL」など。全てのイベントにて使用できます。
