

ボタンがクリックすると新規ウィンドウが立ち上げるという単純な仕様を実装したのだが、 iOS/Safari でウィンドウが立ち上がらなくて困ったことになった。これはその対応メモです。
調べてみるとiOS/Safariではポップアップブロックがデフォルトで有効になっていて、ボタンがクリックされた後になんらかの処理を入れた場合、その後に新規ウィンドウを「Window.open」で立ち上げようとしてもブロックされてしまうということらしい。
悪意あるスクリプトでウィンドウを立ち上げさせないためのセキュリティ措置なのだろう。つくったスクリプトは確かにボタンがクリックされた後ajax通信していた。
> 下記にもっと詳しく書かれているので下記を参考にしてほしい。
> https://qiita.com/chelcat3/items/b46061d90b6675c34a67
### 対応策
対応策としては、ポップアップがブロックされている場合、Window.open に null が返ってくるので、その場合 location.href で遷移させるのが一番はやい。
###### スクリプト
var url = “パス”;
if (!window.open(url)){
location.href = url;
} else {
window.open(url);
}
ただこれだと、同じウィンドウが書き換わってしまう。今回の場合せめて新しいタブを立ち上げて表示させたかったため、ここで詰まった。
いろいろ試してみたところ、以下のようにすることで無理やり実現することができた。
まず表示されないダミーの空フォームをつくる。そしてボタンがクリックされると、まず location.href してから、そのダミーの空フォームをスクリプトで submit している。実際どうしてこれでうまく動作するのかよくわからなかったので、とりあえずの対処療法でしかないのはご留意いただきたい。
###### HTML/ダミーのフォーム
###### スクリプト
var url = “パス”;
if (!window.open(url)){
location.href = url;
} else {
location.href = url;
$('#open_form').submit();
}
2022-04-07 18:17:13
ソースコードは自由にお使いください。また、何らかの不利益が生じたとしても一切責任を負いません。