IE11でのfile:プロトコルに対するHistory APIによる操作

Internet Explorer 11でfile:///で始まるローカル・ファイルのURLをHistory APIで変更すると、ドライブレターがどんどん増えていく現象が起こることを知った。実行する度に/C:が先頭に追加されていく。

history.replaceState(null, '', location.pathname);

相対URLで書きかえが起こるはずなので、こうするとクエリー文字列やフラグメント識別子を削除してクリーンなURLに書き換わるはずだ。実際、普通のウェブサイトで試すと問題なくうまくいく。しかしfile:///プロトコルでローカルのファイルを開いている場合、想定通りに動かない。

> location.pathname
< "/C:/Users/Kyo/Desktop/test.html"
> history.replaceState(null, '', location.pathname)
< undefined
> location.pathname
< "/C:/C:/Users/Kyo/Desktop/test.html"

このようにドライブレターが増殖する。URLの書き換え自体はこのおかしなURLにちゃんと(?)書き換わっているので、この状態で再読込すると「このページは表示できません」になる。


明らかにバグと言えそうだが、実際に何か致命的なことが起こるとも思えないバグだ。報告はしておいたけど、悪いこともできなそうな気がするので放置されそうだ。