読者です 読者をやめる 読者になる 読者になる

AjaxなどJavascriptを警告なしでオフライン上で使用

僕が高校生の頃はフレームがまだ全盛期でした。
最近になって非同期通信、すなわちprototypeやJquery、MootoolsなどのAjax系のライブラリが一般的になってきました。

これらのライブラリはインポートするだけで、誰でも気軽にダイナミックな効果を追加できる素晴らしいものです。
しかしJavascriptを使っているだけあり、オフライン上に保存して使用したりすると
天下のInternetExplorerさんでは警告をいただくわけです。

最近のIEではユーザーの意思と関係なく、内部ファイルにアクセスしようとするソースには
ブロックをかけてくれます。デフォルト設定で。
Ajaxとは無縁でも、画像などを使っているとすぐ警告が出ます。
さすがMicrosoftさん!ご親切です。

...まぁ、悪意なく作成している側としては余計なお世話ですが。。。
ライブラリに関係するファイルをブロックされてしまうと、Ajax系の機能がすべて無効化されてしまいます。
これを防ぐ方法はないのか?と言いますと...実は何個かあります。

htaファイルにする

HTMLApplicationという、HTMLベースの実行ファイルにします。
htaファイル内のソースは内部アクセスなどに一切制限がありません。
ソースの内容もほぼHTMLのままで大丈夫です。
あまり見慣れないファイル形式になるので、僕はもらってもクリックしないと思います。
ということで今回は割愛します。

Mark of the Web機能を使う

一応Microsoftさんが回避方法を用意してくれています。
The Mark of the Web (MOTW)というマイナーな機能です。
Internet Explorerはファイルを読み込むときに "saved from URL" というコメントがないか検索していて、
もしソース内に該当するコメントがあった場合には、インターネット上のセキュリティ設定を適用してくれる機能です。
要するに、オフライン上のファイルをサーバー上にあるファイルとして扱ってくれる機能です。
この機能を上手く使うと、警告を出さずにスマートなコンテンツが作成できます。

この機能を使うためには、ソース内にコメントを一行追加する必要があります。

<!-- saved from url=(文字数)アドレス -->

このコメントがあるファイルは、IEがそのアドレスにあるものとして内部的に扱ってくれ、cookieなども全て共有できます。

例:
<!-- saved from url=(0023)http://www.contoso.com/ -->
<!-- saved from url=(0014)about:internet -->*1

ローカルでしか使わない場合はこちらを指定するといいと思います。

<!-- saved from url=(0016)http://localhost -->

さて、とても便利なこのマイナー機能ですが、使うには何点か制限があります。

  • MOTWコメントを最初の2,048バイト内に明記する必要がある。(推奨は一番初めの行)
  • リンクするHTMLファイルすべてに対応させる必要がある。
  • 改行コードをCR+LFにする必要がある。

特に注意するべき点が改行コードの統一です。
CR+LF以外のHTMLファイルには、MOTWコメントがあるHTMLファイルからはリンク出来ないのです。無効になってしまいます!

詳しいことはInternet Explorer Developer Center - Mark on the Webに書いてありますので、英語の読める頭のいい方は読んでみるといいかもしれません。

*1:<!-- saved from url=(0013)about:internet -->となっている参考サイトがありますが、アドレスの文字数を指定するので間違いです。