Windows Server 2003とabout:blank
Windws Server 2003の環境でJavaScriptで動的ページを生成した際、about:blankページ表示に関するセキュリティ警告*1に悩まされることになってしまいました。
いくらソースを確認してもabout:blankを使う処理を書いていませんので、この警告が出るわけは無いんです。
一週間悩んで、ふと気が付きました。documentオブジェクトにマッピングされていないエレメントオブジェクトに他のエレメントオブジェクトを挿入した場合、仮のレンダリングページとしてabout:blankがJavScriptに使用されてしまうのではないかと。次のように表を生成するソース*2でさっそく調べてみると、見事にJavaScript自身がabout:blankを自動生成して使ってます。
var table=document.all.TBL1; var tr=table.insertRow(); var td=document.createElement('TD'); var img=document.createElement('IMG'); img.src="hoge.jpg"; td.insertAdjacentElement("beforeEnd",img); tr.insertAdjacentElement("beforeEnd",td);
この場合、確定していない表のセルオブジェクトに画像オブジェクトを挿入した時点でabout:blankが使われますので、セルオブジェクトを先に確定させることで、about:blnkの問題は回避できるようになります。
var table=document.all.TBL1; var tr=table.insertRow(); var td=document.createElement('TD'); var img=document.createElement('IMG'); img.src="hoge.jpg"; tr.insertAdjacentElement("beforeEnd",td); td.insertAdjacentElement("beforeEnd",img);
ちなみに、この問題のコーディングはわたしが書いた部分じゃないのですが、自分が書かない手順*3とはいえ、あせって調べている最中はなかなか気が付かないもんです。
書いた本人もかなり謝ってくれましたが、まあしかたないですね。残念ながら痛い目に会わなければ、注意しても覚えてくれませんから。
*1:Windows Server 2003のセキュリティ強化のため、突然表示されるようになったのですが、結構安直にabout:blankを使っていたので、修正が大変でした。
*2:掲載のため加工したので、間違いがあるかもしれませんがご容赦を。
*3:そもそも上の書き方は間違ってると思いますし、以前IEの挙動不信に悩まされた時の原因がこれでしたので、普段はかなり注意しているつもりなんです。