« Flash 10の新機能・ローカルのテキストファイルの読み込み | トップページ | 失敗しないAmazon.co.jpでの買い物方法 »

2008/12/27

Google Toolbarの最新版をインストールするとJavaScriptの挙動が変わることがある(window.external関連で)



最近、顧客の一人から指摘があり、原因を特定できず、非常にあせったことがあります。環境を聞いても、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のプロパティへのアクセスでエラーが出ないようにする処理が入っていること(推論です。)が原因で、プログラムが誤作動することがありました。


--- 2008年12月30日 21時40分頃追記 start ---
IE7であっても、例えば下記のようなプログラムで、Google Toolbarの最新版(バージョン5)がインストールされれている場合と、そうでない場合でとでは挙動が変わります。
window.external.addServiceはIE8β版で実装されていますが、IE6であれIE7であれ、Google Toolbarの最新版がインストールされていると、window.external.addServiceが利用可能なように判断される可能性があります。ですから、window.external.addServiceが利用可能かどうかは、別の手段でIE8以上かどうかを判断する必要がありそうです。
--- 2008年12月30日 21時40分頃追記 end ---



サーバまるごとセキュリティ強化!WEB・メール・FTPも暗号化通信で安心

|

« Flash 10の新機能・ローカルのテキストファイルの読み込み | トップページ | 失敗しないAmazon.co.jpでの買い物方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/43547088

この記事へのトラックバック一覧です: Google Toolbarの最新版をインストールするとJavaScriptの挙動が変わることがある(window.external関連で):

« Flash 10の新機能・ローカルのテキストファイルの読み込み | トップページ | 失敗しないAmazon.co.jpでの買い物方法 »