ローカルに置いた MDwiki を Internet Explorer でも読めるようにする

前提

  • MDwiki v0.6.2
  • IE11

コード

mdwiki.html の以下部分について、

<!-- START dist/MDwiki.js -->
<script type="text/javascript">;(function() {

/**
 * Block-Level Grammar
 */

var block = {
  newline: /^\n+/,
  code: /^( {4}[^\n]+\n*)+/,
  fences: noop,
  hr: /^( *[-*_]){3,} *(?:\n+|$)/,
  heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
  ...

ローカル(file:///)上で外部ファイル読み込みのセキュリティ制約を回避するいくつかの方法 - Qiita の IE11 の部分を参考に、以下のように埋める。

<!-- START dist/MDwiki.js -->
<script type="text/javascript">;(function() {

/* ★★★ 追加した ★★★ */
$.ajaxSetup({
  xhr: function() {
    try {
      return new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      return new XMLHttpRequest();
    }
  }
});
/* ★★★ 追加した ★★★ */

/**
 * Block-Level Grammar
 */

var block = {
  newline: /^\n+/,
  code: /^( {4}[^\n]+\n*)+/,
  fences: noop,
  hr: /^( *[-*_]){3,} *(?:\n+|$)/,
  heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,

FAQ

Q: IE11 以外の IE ではどうやるの?

上記 Qiita に書いてある。ここでは紹介しない。

Q: なぜこれで IE でも読めるようになる?

IE は「ローカルから外部ファイルを読み込む」動作を禁止している。セキュリティのためだ。

これをしておかないと、「外部に置いた有害な javascript ファイル」を読み込む HTML ファイルが、これ一つでウイルスとなってしまう。なにせ HTML ファイルを開いた時点で、有害な javascript ファイルが読み込まれ実行されてしまうからだ。こういう事態を防ぐために ローカルから外部ファイルを読みに行く動作自体を禁止してしまおう となっている。

で、MDwiki では xxxx.md にアクセスした際に、その内容を動的にパースして HTML に変換して表示する、という処理を行っているのだが、この「xxxx.md の内容を取得する」ときに、外部ファイルを読み込む処理を使っている。もっというと XMLHttpRequest()。

幸いにも IE には Microsoft.XMLHTTP という「IE でしか使えない "外部ファイルを読み込む処理"」があり、こちららについては上記の制約が無い(ActiveX を使っているので ActiveX の設定として禁止してたら結局使えないが、IE 使う環境なら ActiveX も有効になっていると思われるので結果的に使える)。

Q: 読めないけど?(共有フォルダに置いている)

私の環境では、UNC パスの場合は読めなかった。ローカルにコピーすれば読めた。

どうやれば読めるようになるのだろう?MSDN の About Native XMLHTTP (Internet Explorer) を見た限り、インターネットオプションのセキュリティを工夫すればいけそうな気がしないでもないが、閲覧者側に設定変更を要求するのは優しくない。