Operaでユーザースクリプトのみを有効にする(Disable script編)
- Disable script
- ページで読み込まれるスクリプトを全てはじき、スクリプトを無効化しているのと同等の状態で表示するようになります
- ujsenabledで始まる関数のみが実行されます
んなばかな、と思いつつリンク先のを見てみたが・・・なーるM。これ考えた人すごいわ。しかも2005年て。
解説
イベントハンドラのBeforeExternalScript、BeforeScript、BeforeJavascriptURL、BeforeEventListenerに対してe.preventDefault()を設定することで、以下の方法によるJavaScriptの実行を阻止している。
- javascript: 形式
- script要素からsrcで外部スクリプトを呼び出す
- script要素に直接コードを埋め込む
- addEventListenerを使ってclick等から実行させる
基本的にwebページ上でJavaScriptを実行するということは、上記4通りのいずれかになるので、常にJavaScriptがOFFとなる。
で、ユーザースクリプトはこれら4通り以外の領域で実行されるので、問題無く動作するというわけだ。
問題点1 一部のユーザースクリプトが動作しなくなる
スクリプトの都合上、上記の4通りの方法のうちいずれかを取っているものは当然動作しなくなる。
そこで、回避策としてイベントリスナーとして関数名にujsenabledを含んでいるもののみ実行を許可するようにされているので、そのようなスクリプトは書き換えが必要になる。
問題点2 ホワイトリストの作成が面倒
基本的にブラウザ側のJavaScriptを有効にして使うことになり、結果として全てのページのページ側で用意されたJavaScriptが問答無用で無効になる。取捨選択は行われないので、手作業でホワイトリストを追加しなければならないのが面倒。
例えばdel.icio.usでJavaScriptを有効にしたいのなら、以下のようにdisable-script.js内に記述する必要がある。
// @include http://del.icio.us/
if( document.location != "http://del.icio.us/" )
// @include http://del.icio.us/*
if( document.location.indexOf( "http://del.icio.us/" ) != 0 )
// @include del.icio.us
if( !document.location.match( "del.icio.us" ) )
感想
ホワイトリスト追加は容易なので個人的に問題ではないが、ユーザースクリプトを一部修正しなければいけないのがなんとも微妙。
だが、手法が面白いので応用して何かできないか思案中。
参考
Info
Navigation
- 関連のあるエントリ
- 2007-11-14 続・ニコニコ動画視聴補助スクリプト for Opera
- 2008-10-06 ニコニコ動画視聴補助スクリプト for Opera 秋対応版
- 2007-04-14 ニコニコ動画視聴補助スクリプト for Opera
- 2008-10-10 ニコニコ動画専用Opera お試し版 9.60
- 2008-08-26 ニコニコ動画専用Opera
- 新しいエントリ(日付順)
- Operaでユーザースクリプトのみを有効にする(Ultimate blockage/Noscriptlike編)
- 古いエントリ(日付順)
- 10月14日の駄文
Comment
投稿したコメントは公開されません。サイトオーナーのみが閲覧できます。
返信等を希望する場合は、コメント内に連絡先のメールアドレスかサイトのURLを入力してください。
2007
1015