ブックマークレットを外部ファイルに書く方法(IE限定)

hasegawayosuke2008-01-16

一昨日のWizard Bibleで紹介されていたブックマークレット本体を外部に置く方法を見ていて、似たようなのを読んだ気がしていたのを思い出したので書いてみます。
本日の参考文献: Windows Script Programming: セキュリティレベルを上げるとブックマークレットが使えなくなる。

IEでローカルにおいてあるHTMLファイルを file: (だったり単純に C:\path\... だったり) で開いた状態でブックマークレットを実行しようとすると、ローカルコンピュータゾーンのロックダウンにより「セキュリティ保護のため、コンピュータにアクセスできるアクティブ コンテンツは表示されないよう…」という警告が表示され、ブックマークレットはすぐには実行されません。また、「制限付きサイト」に登録してスクリプトの実行を禁止した状態では、警告の表示もないままスクリプトの実行はブロックされます。
ブックマークレットは、表示されているコンテンツのドメインで動作しますので、スクリプトの実行が禁止されたローカルコンピュータや制限付きサイトでブックマークレットが動作しないのは当然なのですが、やはりちょっと不便に感じるときがあります。
そこで、ブックマークレットではなくWSHを起動し、そのWSHから起動済みのIEにアクセスすることで、ゾーンによる制限を回避できます。
手順としては以下の通り。

  1. IEのアドレスバーに "shell:favorites" と入力。
  2. 「お気に入り」フォルダが開かれるので、適当なファイルを作成し、"PVVN1ch1VV4.js" にリネームします。
  3. PVVN1ch1VV4.jsの中身を以下のようにして保存します。
var Shell = new ActiveXObject( "Shell.Application" );
var ie = Shell.Windows().Item();
var window = ie.Document.parentWindow;
window.alert( window.document.location + " PVVN1ch1VV4!" );

これで、IEのお気に入りに「PVVN1ch1VV4.js」が追加され、クリックすると*1ゾーンの設定とは無関係にブックマークレット(のようなWSH)が実行できます。
もちろん、ローカルコンピュータゾーンや危険なサイトを登録しているであろう制限付きゾーンでスクリプトを動作させるわけですから、スクリプトの内容については細心の注意を払う必要があります。

*1:既定のスクリプトホストがCScript.exeに割り当てられているときはコマンドプロンプトが一瞬表示されます。その場合は、コマンドプロンプトを開き、"CScript.exe /H:WScript" を実行するとよいでしょう。詳細は「既定のスクリプト エンジンを設定します。」などを参考にしてください