非同期リクエストでブラウザのポップアップブロッカーをバイパスする方法

問題


セキュリティポリシーブラウザーでは、ユーザーが何らかの操作を直接行った場合にのみポップアップを開くことができます。 たとえば、次のコードは機能します。

$("someElement").on("click", function(){ window.open("http://yandex.ru") } 


ここで、リンクを取得するAPIリクエストを作成する必要があるとしましょう。その後、このリンクでウィンドウを開きます。
したがって、ウィンドウはユーザーアクションによって既に開かれていないため、コードは機能しなくなります。

 $.get("someURL").done(function(res){ window.open(res); }); 


したがって、次のような問題を解決できます。
1.必要なリンクを事前に取得しますが、このオプションでは、ユーザーのアクションに従ってパラメーターを渡してリンクを形成することはできません
2.要求を同期化します。これはオプションではありません
3.よりよく考える

第三の方法


しかし、使いやすいように空のリンクでウィンドウを事前に開いて、ウィンドウにローディングインジケータを描画し、リンクが形成されたら場所を置き換えたらどうでしょうか。

私たちは、すべてがうまくいくようにします。

実際に小さなコード:

  var win = window.open("", params) //   win.document       ,       $.get("someURL").done(function(res){ win.document.location = res; }); 


他の解決策は、コメントに書いてください。

Source: https://habr.com/ru/post/J200096/


All Articles