Page Index
日付 題名 記事の要約
2003.1.6 なんとなくホームネットワーク インターネットのついでに
2003.1.20 サーバーとローカルの壁を越えて 「ソースの表示」拡張記

 私が根城としているのは、ボロアパートの101号室である。2DKの間取りは新婚夫婦にぴったりだ。なんてのはどうでもよくて(私はまだ独身貴族だ)、103号室には愚弟が住んでいる。ちなみに兄貴の方が後である。なにせ兄弟で同じ仕事をしているため、とても都合がいい。なんてのもどうでもよくて、兄弟揃ってパソコンオタクである。キャリアは愚弟の方が圧倒的に長く、賢兄は常に不利な戦いを強いられている(しかし HTML と CSS と JavaScript では勝っている)。

 私の家には電話がないので、インターネットは愚弟宅からLANケーブルを流すことで実現されている。102号室のお隣さんは、まさか自分ちのベランダの上に電線が通ってるなどとは夢にも思わぬだろう(不在を狙って通したのだが、いつ帰ってくるかとドキドキした)。ちなみに愚弟はケチなので、電話回線代とプロバイダ料金は綺麗に折半である。(そのくせグローバルIPアドレスはよこさない。ケチだ)

 勘の良い諸氏ならお気づきだろうが、二人のパソコンはLAN内でつながってるのである。ということは、ネットワーク設定をすれば、お互い家にいながらにしてファイル交換ができるのだ。なんと危ない。一応アクセス拒否の設定を施してはいるものの、ウィルスにでも感染されたら俺まで巻き添えにされそう。

 しかし、家から出ることなくファイル交換ができるのは便利である。家がいくら近くとも、いちいちフロッピーや CD-RW に入れるのは面倒くさい。ネットワーク設定を施すのはかなり苦労したが(苦労したのは愚弟だけで、俺は見ていただけだ)、これで「なんとなくホームネットワーク」が完成。家と家をまたがってもホームネットワークと言うのだろうか?
 ただ問題なのは、ファイル交換をする機会など滅多にないことか。


 新siteCTSAnHTTPd(自分のPCをWebサーバーにするソフト)ActivePerl(Windows でPerl言語を実行できるインタープリタ)を導入し、ローカルサーバーを介して試験中。これだとCGIの動作も確認できるし、index.html へのリンクはファイル名を省略することができる。つまり、サーバーにアップした時と同じ条件でテストできるので、JavaScript やCGIの動作確認などに大変便利。

 ローカルサーバーを通す場合、URLのサーバーアドレス部は http://127.0.0.1/ となるのだけど、ここで問題がある。IEはインターネットに接続してると信じきっているため、「ソースの表示」はキャッシュのやつを開いてしまうんですな。それはローカルにある実ファイルじゃないので、つまりIEからファイルを直接開いて編集できないことになり、えらい不便なのである。

 で、作ったのがこのスクリプト。

<script type="text/jscript">
function viewSrc(ext) {
  var path = ext.location.href;
  var documentRoot = "F:"; //index.htmlの入ってるルートフォルダ
  var editorPath = "C:/Apps/Hidemaru/Hidemaru.exe"; //エディタのパス

  if (ext.location.host == "127.0.0.1")
    path = path.replace("http://127.0.0.1", documentRoot);
  else {
    ext.location.href = "view-source:" + ext.location.href;
    return;
  }

  path = path.replace(/\//g, "\\");
  if (path.charAt(path.length -1) == "\\")
    path += "index.html";

  if (path.indexOf("#") != -1)
    path = path.substring(0, path.lastIndexOf("#"));
  if (path.indexOf("?") != -1)
    path = path.substring(0, path.lastIndexOf("?"));

  var appObj = new ActiveXObject("Shell.Application");
  appObj.ShellExecute(editorPath, path);
} viewSrc(window.external.menuArguments);
</script>

 ローカルサーバーの時はパスをローカルファイルのものに変換し、任意のエディタを起動。それ以外の時は通常の方法でソースを開く。
 皆様がご使用になる時は上記スクリプトをメモ帳へコピペし、viewSrc.html などの名前を付けて保存。あとはレジストリエディタでIEのコンテキストに登録して完了。→図 →完成図
 なお、本当に使おうとか血迷った人は、documentRooteditorPath を自分の環境に合わせることをお忘れなく。

 おまけとして、「今見ているページのフォルダを開く」っつぅ拡張コンテキストも作成。IE5.5ではツールバーの「上へ」ボタンで代用できたのに、なんでツールバーのカスタマイズから外しちゃったんだろう。まったく使い勝手の悪い。

<script type="text/jscript">
function folderOpen(ext) {
  var path = ext.location.href;

  if (ext.location.host == "127.0.0.1")
    path = path.replace("http://127.0.0.1", "F:");
  else if (ext.location.protocol == "file:")
    path = path.replace("file:///", "");
  else
    return;

  path = path.replace(/\//g, "\\");
  path = path.substring(0, path.lastIndexOf("\\"));

  var appObj = new ActiveXObject("Shell.Application");
  appObj.ShellExecute("explorer.exe", path);
} folderOpen(window.external.menuArguments);
</script>

追記:2003.4.7
このスクリプトは2003.4.7に改良。