web-dev-qa-db-ja.com

サファリのjavascript window.open

ポップアップブロッカーを中心にサファリ(iPadとデスクトップの両方のバージョン)で新しいウィンドウを開くと、問題が発生しました。基本的に、クリックイベントからwindow.openが呼び出されない場合、safariがポップアップをブロックすることがわかりました。

Window.openを呼び出しているイベントは、現在リストボックスから変更されています。

このシナリオでサファリをだましてポップアップを許可するように処理するイベントを切り替える以外の方法はありますか? (onchangedイベント)

30
theMothaShip

ボタンをクリックする以外に、モバイルサファリで新しいウィンドウを開く方法はないと思います。これを参照してください StackOverflow Question これは似ています。動作するかどうかはわかりませんが、 jqueryのtrigger()関数を使用してプログラムでボタンクリックをトリガーする を見ることができます。

また、jquery uiなどのツールを使用して、独自のページ内にダイアログを表示するオプションを確認することもできます。

HTH!

13
Scorpion-Prince

サファリには、リンクがブロックされたときに表示されないポップアップブロッカーサイレンサーがあります。

ポップアップブロッカーがアクティブかどうかを確認するには、[サファリ設定]> [セキュリティ]> [ポップアップのブロックなど]に移動します。

簡単な方法でそれを横断するには、新しいウィンドウを開くことができないため、ポップアップがブロックされたことを示すアラートを表示します。

私の場合、選択リンクを使用して外部リンクを開きます。

HTML

<select id="retailer" class="windowOpen retailer-submenu">
    <option value="null">Select one</option>
    <option value="http://Amazon.com">Amazon</option>
    <option value="http://ebay.com">eBay</option>
</select>

Javascript

<script type='text/javascript'>
    $('select.windowOpen').change(function(){
        var url = $(this).val();

        var open = window.open(url);
        if (open == null || typeof(open)=='undefined')
            alert("Turn off your pop-up blocker!\n\nWe try to open the following url:\n"+url);
    });
</script>

ポップアップがブロックされているかどうかを確認するコードは次のとおりです。

var open = window.open('http://google.com');
if (open == null || typeof(open)=='undefined')
    alert("Turn off your pop-up blocker!");

PS:jqueryトリガーは動作しませんでした。

30
Lucas Serafim