« IE7とAjax | トップページ | IE7とJavaScript(window.close()メソッドと確認メッセージ) »

2006/10/30

IE7とJavaScript(promtメソッドとセキュリティ)



Yahoo! BB 8M ずーっと2,180円キャンペーン

IE7で、JavaScriptの挙動が変わったものとして、promptメソッドがあります。IE7では、ボタンクリックなどユーザーアクションに基づくものであったとしても、promptメソッドによってユーザー入力欄を表示させようとすると、いつもの「情報バー」が表示されます。そして、「この Web サイトはスクリプト化されたウィンドウを使用して情報を依頼しています。この Web サイトを信頼している場合、ここをクリックして、スクリプト化されたウィンドウを許可してください」というメッセージが表示されます。



のような感じです。そのため、IE7では、よくあるpromptメソッドのサンプルコード(「パスワードをJavaScriptにそのまま書くのはどないやねん? せめて、難読化するべきだろう?」という疑問はとりあえずおいておいて・・・。):

が期待どおりの動作をしません。ブロックされるだけならまだしも、入力されたパスワードが何もないままブロックされるものの、JavaScriptは実行されるために、「パスワードが異なります。」というアラートが表示されることになります。

情報バーの「情報バーにお気づきですか?」といういつものやつを「閉じるボタン」クリックで消すと、「パスワードが異なります。」というアラートが表示されていることに気づくでしょう。

ですから、
1.ユーザーが入力した結果、パスワードが異なる場合
2.「キャンセルボタン」をクリックしたために、「null」しかかえってこずに「パスワードが異なる」結果になっているのか
3.IE7を使っているがゆえに、最初の一回目は問答無用で「null」がリターンされているがゆえに、「パスワードが異なる」結果になっているのか

を区別しなければ、IE7ユーザーの方は、「パスワードが異なります」と言われても、入力欄さえ表示されていないじゃないか、と憤慨する結果になります。

そこで、上の例をIE7でも自然な?形で動くようにするのであれば、かつ、「2」と「3」の区別がつくよいうにするのであれば、

のような感じにしなければならないでしょう。もしくは、nullが返ってきたら、「何もアラートを表示しない」というのも手でしょうが、「IE7の情報バー」もすでに想定済みであることをユーザーに伝えられた方がユーザーに安心感を与えられるかもしれませんし、自己満足かもしれませんが、何だかカッコよくありませんか?

なお、ここでは、IE7であるかどうかを確認するために、「XMLHttpRequest()メソッドをサポートしているか」をチェックしています(参照:「IE7とAjax」)。SafariやFirefoxがユーザーーエージェントを偽装している場合には、上のスクリプトでは、「ie7=true;」となってしまうため、その点はいまいちですが、IE6やIE5がIE7と判定されることはありえないため、まあまあとも言えるでしょう。



2006年10月31日10時45分ごろ追記
なお、他の解決策としては、ユーザーにセキュリティ設定を変更させるという荒業もあります。設定を強要できる場合は、これでもいいかもしれません。

メニューの「ツール」→「インターネットオプション」→「セキュリティ」で「インターネット」ゾーンを選択の上、「レベルのカスタマイズ」を開きます。すると、



のような画面が開きますので、ここで、「スクリプト化されたウィンドウを使って情報の入力を求めることを Web サイトに許可する」を有効にします。これで、本ページで論じたようなメッセージは表示されなくなります。逆にいえば、この設定がデフォルトでは無効になっている以上、どんなに頑張っても(セキュリティホールでも突かない限り)、promptメソッドを使って入力させようとしている限り、この警告メッセージは強制表示されるということになります。このことは、ユーザーからの苦情や、「ユーザーからの苦情で何とかしろ」と言ってこられる上司に対する説明になるので、このデフォルト設定は覚えておいて損はないでしょう。



転送量超過でお困りの方、チェックしてみてください。

|

« IE7とAjax | トップページ | IE7とJavaScript(window.close()メソッドと確認メッセージ) »

コメント

コメントを書く



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


コメントは記事投稿者が公開するまで表示されません。



トラックバック

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

この記事へのトラックバック一覧です: IE7とJavaScript(promtメソッドとセキュリティ):

« IE7とAjax | トップページ | IE7とJavaScript(window.close()メソッドと確認メッセージ) »