最近、顧客の一人から指摘があり、原因を特定できず、非常にあせったことがあります。環境を聞いても、Internet Explorer 6ですから特に変わった環境ではないどころか、ありふれています。再現できませんでした。

本当にIE6かどうかを確かめるため、その顧客にユーザーエージェント(ビルド番号も)を調べるサイトにアクセスしてもらったところ、こちらの複数端末のIE6との違いは唯一でした。「GTB5」という文字列が入っていることでした。早速、Google Toolbar 5をインストールしたところビンゴ! 再現できました。

以下のようなサンプルコードを実行した場合、IE6ではAddSearchProvderメソッドはサポートされていませんから、
IE6では、
window.exteranalはサポートされています。
AddSearchProviderはサポートされていません。

となるはずです。ところが、Google Toolbarの最新版がインストールされているIE6では、

window.exteranalはサポートされています。
AddSearchProviderはサポートされており、unknownです。
ボタンの表示

となります。

●設置サンプル
http://shimax.cocolog-nifty.com/gt5.html

window.external.AddSearchProviderがundefinedでないことに安心して、ボタンをそのまま表示させてしまっています。このまま、try~catch~を使わずにこのメソッドを実行してしまうとエラーが発生してしまうのです。そもそも検索プロバイダに追加できないブラウザに対してもこのボタンを表示させたくなかったのですが・・・。

Google Toolbarではwindow.externalのプロパティへのアクセスでエラーが出ないようにする処理を入れているか何かでこのような結果(undefinedを返すべきところでundefinedが返らない結果。)になってしまっているのでしょうが、これは困ったことです。このためにコードを書き換えて、「IE6以下の場合はダメ」と素直に書き直すしかなさそうです。

上記の話は、実際のトラブルの話を少し変えています。そのまま公開するわけにはいかないこと(いわゆる企業秘密?)があるためです。特殊なケースであったかもしれないのですが、IE6だけでなく、IE7でも問題が発生していました。ただ、その特殊なケースを説明できないので、確実に問題が発生するIE6でのみ起こるかのように説明しています。とにかく、Google Toolbarの最新版ではwindow.externalのプロパティへのアクセスでエラーが出ないようにする処理が入っていること(推論です。)が原因で、プログラムが誤作動することがありました。


ブックマークに追加する