IE8でJavaScriptの動作チェックを行っていたら、
突然、エラー 800a03e8のため止まりますみたいなことをIEが出力してきました。
800a03e8でぐぐってもほとんどヒットしないので途方にくれていましたが、
IE TesterでほかのバージョンのIEでも確認してみたところ、
きちんとしたエラーメッセージがもらえました。
(IE8でデバッガを有効にしていたからちゃんと出なかったのかな?)
下記のようなエラーメッセージが出ました。
HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
そこで落ちたら今まで動いていたコードが動かなくなるじゃん!
document.write()とかの使いどころが激減する予感。
開発しているシステムのほうではdocument.write()でdiv要素とかを出力していまして、
body要素の半ばあたりでそれやっちゃうと上記みたいに怒られる、と。
しかしながらほかのサイトでもご紹介されているとおり、
bodyのとじタグ付近だったらOKなんですよね、いみふ。
bodyのとじタグ付近だろうがなんだろうが、
上記のエラーメッセージ通りの制約を課すならアウトだろうに。
何考えてんの?IEのデベロッパーは。
とか思います。
bodyの子要素からしてみれば、bodyは書き換えてよい親なのでしょうか。
対策として、document.writeやってるところは
すべてwindowがloadし終わったあとにdocument.body.appendChild()使って
要素を追加するよう書き直すしかない、ってことなんでしょうかね。
そういえばdocument.writeやってても大丈夫な箇所も、一応あります。
bodyの子(孫とかではなく)になる要素だったらdocument.writeして
要素を追加してもよいのかも。
んで、一回のdocument.writeの呼び出しで
bodyの子、bodyの孫を一気に出力しちゃえばOKなのかな
(一気に、っていうのは孫要素のとじタグもちゃんと出力してしまうということで)。
もー世の中FirefoxとChromeだけになりませんかね、無理ですよね。ふぅ。
No comments:
Post a Comment