NoScript っぽいもの
Opera ユーザスクリプトの話。
ちょい、NoScript っぽいものを作成中
Operaの不満点
Operaはいろいろとカスタマイズが効く。サイト単位で制御が効いてすばらしいと思う。
が、JavaScriptの実行許可では不満点がある。
それは、不許可にすると、ブックマークレットやショートカットにGo to page, "javascript:...."
としたようなものも動かなくなってしまう点。これは大変困る。
仕方ないので、デフォルト許可にしているわけだが、やはり余計なスクリプトが動作したりとウザったい。
Opera独自イベントリスナ
ブックマークを漁ってたら、こんなのが出てきた。
Opera: ユーザー JavaScript にて使用可能なメソッドとイベント
- BeforeScript
- SCRIPT 要素が実行される前に発生します。script 要素は UserJSEvent の element プロパティとして利用できます。スクリプトの内容は script 要素の text プロパティとして利用できます。また、その内容は次のように書き換えることもできます。UserJSEvent.element.text = UserJSEvent.element.text.replace(/!=\s*null/,''); BeforeScript イベントは外部スクリプトと同様にインラインスクリプトに対しても発生します。これには Opera が通常実行できない VBScript などといったスクリプトも含まれます。キャンセルされた場合、script 要素は実行されません。
素晴らしいじゃないですか!!
window.opera.addEventListener("BeforeScript", function(aEvent) { var src = aEvent.element.src; // <script src="..."> などと外部jsファイルを呼びだしている要素 if (src) { // ... } // <script><!-- ... --></script>などとインラインスクリプトの要素 else { // ... } aEvent.preventDefault(); }, true);
でスクリプト要素の実行はブロックできる。
そいで、JavaScript URLはスクリプト要素じゃないのでサイト毎、またはグローバルの設定に依存。
基本的にグローバル設定でJavaScriptを許可してユーザスクリプトでスクリプトをブロックすれば、快適ライフが送れるはず。