これがWindowsXP ServicePack2から導入され、Googleツールバーにもあるポップアップブロックによって、効かなくなることがある。それぞれ設定を解除させれば良いが、今回紹介するのは設定解除することなく、回避する方法である。
調べてみると意外に簡単に方法が見つかった。
そもそもポップアップブロックはユーザーが自らの意思でボタンを押したものには働かない。自動で(勝手に)開くウィンドウを阻止するものである。よってサーバーサイドで実行したものは必ずブロックされてしまう。
そこでクライアントサイドのOnClickイベント内で開くように変更すれば良いのである。
例:onclick="window.open('hoge.aspx');return false;"
※最後のreturn falseはonclckイベントを最終的にキャンセルさせることでwindow.open()だけを実行させる意味がある。
ただ、このサーバーサイドからクライアントサイドへの変更には結構問題が起こる。特に入力フォームの内容を取得してからでないと次の処理を決められないときなど一度ポストバックが必要な時がそれにあたる。この点に関しては事前に入力フォームのイベント内でポストバックさせて取得しておくしかない。
サンプルはこちら−>popup.lzh
なおサンプルをテストする場合、開発環境からの実行ではポップアップブロックが無視されるのでIIS等でサイトを立てて実行すること。またURLにlocalhostを使うとローカルイントラネットゾーンとなりこれもポップアップブロックが解除される(但しGoogleツールバーのポップアップブロックは有効)。IPアドレスを指定すればインターネットゾーンになりポップアップブロックが有効になるので、回避の効果が確認できる。
サンプルの実行画面
1.起動画面
上の段がサーバーサイドでのwindow.openでポップアップブロックが掛かってしまう。下の段がその回避策である。
2.ポップアップブロックが効いた
3.Googleツールバーのポップアップブロックが効いた
4.ポップアップブロック回避策で無事オープン
すごく悩んでいた。