2010年12月21日火曜日

Tweetボタン、Buzzボタン、FacebookのLikeボタン、いずれかが原因でIE8でページ表示に失敗する

Tweetボタン、Buzzボタン、FacebookのLikeボタンを設置したページが、IE8で表示できないという報告を、幾つか頂いた。それらのボタンが設置されていない他のページは、何ら問題なく表示されるらしい。

しかも、IE8ユーザーだと常にページが表示されないのではなく、表示されないユーザーも若干いる、という状況。自分のIE8では、表示されないと報告を受けたページは、問題なく表示される。

OSはWindows 7 32bit/64bit、Vistaと共通点が見られないが、報告をもらった方のブラウザは全てIE8だった。

ちなみに互換表示でも、表示されない状況は変わらないらしい。


どのように表示されないのか、具体的な報告を送ってくれた方のメールには、以下のエラーメッセージとエラーコードがあった。

メッセージ: HTML Parsing Error: Unable to modify the parent container element before the child element is closed (KB927917)
ライン: 0
文字: 0
コード: 0

「KB927917」については、Microsoftのサポートページに対応策が書かれている。
Why do I receive an "Operation aborted" error message when I visit a Web page in Internet Explorer?

記事を読んだ限り、div要素の内側のscriptブロックで、閉じられていないdiv要素の親コンテナーの内容を変更しようとしたときに発生するようだ。


そこで疑ったのが、TweetボタンやBuzzボタン。それらはjsを読み込んでいるが、もしかしたら、申し訳ないが、それらのjsの書き方が原因でKB927917が起こっているのではないか、ということ。

試しに、Tweetボタン、Buzzボタン、FacebookのLikeボタン、全てを非表示にしてみたところ、KB927917が発生せず、ページが完全に表示できたと報告を頂いた。他サイトのコードの埋め込みは増えているが、大切なページに埋め込むときには慎重にならないといけない。


では、jsのロードではなく、iframeではどうだろいうということで、Twitterのiframeの記述だけ加えてみた。それでまた表示できなくなったと報告を受けるかどうか、様子を見てみよう。

なお、Facebookは最初からiframeのコードが提供されている。Twitterは、デフォルトはjsをロードするコードが提供されるが、調べるとiframeのコードの書き方も提供されている

犯人はBuzzかなあ・・・?

API制限が緩くて開発者としては使いやすいサービスなので、Buzz頑張って欲しいなと思っているのだが・・・