Firefoxで、閲覧中のページのソースを任意のエディタで開くという機能を提供する拡張はいくつかあるのですが、サブ・メニューにあったりするのがかったるかったり、もう探すの飽きてきたので、どうにかBookmarkletで出来ないかと画策していました。ムリっぽい・・・と思ってたけど、かなり強引なやり方で出来たりした。

とりあえずFirefoxで作ることが出来るBookmarkletそのものでは、どうもムリそうという結論に達したので、Bookmarkletから閲覧中のページのURLを引数にしてアプリケーションをうまいこと起動してやれば良いかなと目先を変えました。で、注目したのがURIスキーム。irc:などを思い浮かべればわかるように、Windowsではレジストリにきちんと設定してやれば、任意のアプリケーションを起動することが可能です。

というわけで、edit:というURIスキームをでっち上げ、閲覧中のページのURLの頭にedit://をつけるBookmarkletを作成しました。これで一段階クリアです。edit:というURIスキームを定義するレジストリ・ファイルはこんな感じです。

REGEDIT4

[HKEY_CLASSES_ROOT\edit]
@="URL:View Source Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\edit\shell]

[HKEY_CLASSES_ROOT\edit\shell\open]

[HKEY_CLASSES_ROOT\edit\shell\open\command]
@="wscript.exe C:\\Scripts\\ViewSourceByEditor.vbs \"%1\""

最後のcommandは後述のVBScriptを置く場所によって変わってきます。Bookmarkletは、新しくBookmarkを作成し、Titleを「View Source by Editor」とかテキトウに入力し、Locationに、

javascript:document.location.href='edit://'+document.location.href;

と入力するだけ。これで、http://example.com/を閲覧中にこのBookmarkletを起動すると、edit://http://example.com/にジャンプし、上記レジストリを元にwscript.exeが引数付きで起動されます。

そして今度は上記レジストリではViewSourceByEditor.vbsとなっているVBScriptの作成です。このスクリプトはedit://http://example.com/という引数付きで呼ばれるので、要は、URLを切り出してなにかのツールでソースをゲットしてやればよいことになります。ということでViewSourceByEditor.vbsのソース。

' エディタの設定
sEditor = "C:\Program Files\Hidemaru\Hidemaru.exe"
sEditor = Chr(34) & sEditor & Chr(34)

' 引数取得
Set oArgs = WScript.Arguments
sUrl = oArgs(0)
sUrl = Replace(sUrl, "edit://", "")

' ソースを取得
Set oXmlHttp = CreateObject("MSXML2.XMLHTTP")
oXmlHttp.open "GET", sUrl, false
oXmlHttp.send
sSource = oXmlHttp.responseText

' テキストファイルに吐く
Set oWshShell  = WScript.CreateObject("WScript.Shell")
Set oFileSys   = WScript.CreateObject("Scripting.FileSystemObject")
Set oWshSysEnv = oWshShell.Environment("SYSTEM")
fn = oWshSysEnv("TEMP") & "\source.html"
Set fTemp = oFileSys.CreateTextFile(fn, True, True)
fTemp.WriteLine(sSource)
fTemp.Close

' 表示
oWshShell.Run sEditor & " " & Chr(34) & fn & Chr(34)

8行目あたりまでは何のことはないですね。エディタのパスの設定と、引数を取得しURLを切り出しているだけです。URLからソースを取得するのが11~14行目。MSXMLを使うとこんなことが出来たりします(偉そうに言ってるけど知らなかった)。そして17~23行目でテンポラリ・フォルダ(環境変数から取得)にsource.htmlというファイルを作ってやり、取得したソースを吐き出してます。最後にそのファイルのパスを引数にエディタを起動(26行目)。

これでめでたくFirefoxで閲覧中のページのソースを任意のエディタで表示することができました。Bookmarks Toolbarに登録すればアクセスしやすいし、もうかなり満足。

現状では複数のページのソースを表示するとアレなことになる(source.htmlというファイルを使いまわしているため)とかいう問題もありますが、そこらへんはVBScriptを作りこめばどうにでもできると思います。