Opera の UserJS は処理の仕方で具体的な仕様が異なる

前回に引き続き、モヤモヤを整理してみました。誤り等がございましたら、ご指摘をいただけると幸いです。


UserJS の拡張子により処理が異なる。
拡張子が .js の場合は、通常の UserJS として処理される。
拡張子が .user.js の場合は、GreaseMonkey 記法の UserJS として処理される。

通常の UserJS

主に Opera で正常に動作しない Web ページのスクリプトを修正する目的で利用される。

実行されるタイミング

Web ページ内にスクリプトが有る場合、そのスクリプトが実行される直前に実行される。
Web ページ内にスクリプトが無い場合、その Web ページの DOM が構築される前に実行される。
Firefox アドオン "GreaseMonkey" のスクリプトと同じタイミング(DOM 構築後、画像等が読み込まれる前)で実行させたい場合は

document.addEventListener('DOMContentLoaded', function() {
    //実行したい処理
},false);

と書く。
ただ、本家 GreaseMonkey のタイミングで実行するメリットは何だろうか?互換性かな?このタイミングだと、既存のイベントリスナを解除しちゃう?要勉強だね。

利用できる拡張メソッド

(仕様として公表されている以外にも、いろいろあるようです。window.operaのメソッド - by edvakf in hatena)
イベント処理の流れは ユーザーJSのイベント処理 - Operaの備忘録のぺえじ - チーム俺等 などで勉強したい。

GreaseMonkey 記法の UserJS

主に Greasemonkey 記法の UserJS は Web ページの拡張に利用される。
window.opera.addEventListener や関連するメソッド、Magic 関数及び変数を使用できない。

実行されるタイミング

Firefox アドオン "GreaseMonkey" のスクリプトが実行されるタイミングとは異なる。
ページの読み込みが完了し、ページ用の DOM が構築された後、onload ハンドラによって定義された関数が実行される前に実行される。(通常の UserJS にて BeforeEvent.load イベントリスナを生成することと等価。)

まとめ

UserJS の基礎で重要なのは、適用されるページのアドレスチェックとイベントリスナ。


続く

参考 Web サイト

//orera.g.hatena.ne.jp/miya2000/20070314/p0" title="Opera のユーザーJavaScript は「.js」か「.user.js」かで実行されるタイミングが違う - m2O - チーム俺等" class="favicon" style="background-image:url('http://www.getfavicon.org/?url=http://orera.g.hatena.ne.jp/miya2000/favicon.16.png');">Opera のユーザーJavaScript は「.js」か「.user.js」かで実行されるタイミングが違う - m2O - チーム俺等:"通常の UserJS と GreaseMonkey 記法の UserJS で実行タイミングが異なる" の詳しい解説
//d.hatena.ne.jp/os0x/20071015/1192464986" title="OperaのユーザーJavaScriptFirefoxGreasemonkeyと同じタイミングで実行する - 0x集積蔵" class="favicon" style="background-image:url('http://www.getfavicon.org/?url=http://d.hatena.ne.jp/os0x/favicon.16.png');">OperaのユーザーJavaScriptFirefoxGreasemonkeyと同じタイミングで実行する - 0x集積蔵:UserJS の実行タイミングを本家 GreaseMonkey と同等にする方法
//jp.opera.com/support/tutorials/userjs/" title="ユーザー JavaScript による制御" class="favicon" style="background-image:url('http://www.getfavicon.org/?url=http://jp.opera.com/favicon.16.png');">ユーザー JavaScript による制御:UserJS チュートリアル (Opera 9 系用) (公式)