2016-08-07 10 views
0

jQueryを使用して新しいウィンドウを開くと、ブラウザをポップアップブロッカーから守る方法を教えてください。私はこの問題に関してグーグルで語っていたが、まだそれに固執していた。 (クリックのような)ユーザーイベントの処理中に使用される場合、これはjQuery - Window.Open()を使用してポップアップブロッカーを防止します。

$(document).ready(function(){ 
    $('#newLink').click(function(event){ 
    event.preventDefault(); 
    var page = $(this).attr('href'); 
    $.post(page, 
    { 
     pr_no : pr_no 
    }) 
    .done(function(data){ 
     window.open(page, "MsgWindow", "width=800,height=800"); 
    }); 
}); 

答えて

2

ポップアップブロッカーは、一般的にのみwindow.openできるようになります、私が作ったコードです。あなたの場合、$ .getJSONは非同期であるため、イベント中ではなく、後でwindow.openを呼び出すことになります。

するというよりも、window.open、何かを実行します。

2つのオプションがあります。 ajaxの呼び出しを同期させます。これは、ブラウザのUIをロックするので、通常はペストのように回避する必要があります。 、

再び
$.ajax({ 
    url:  "redirect/" + pageId, 
    async: false, 
    dataType: "json", 
    data:  {}, 
    success: function(status) { 
     if (status == null) { 
      alert("Error in verifying the status."); 
     } else if(!status) { 
      $("#agreement").dialog("open"); 
     } else { 
      window.open(redirectionURL); 
     } 
    } 
}); 

:$ .getJSONは同等です:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: callback 
}); 

...ので、あなたは上記と追加非同期にあなたのparamsをマッピングすることで、あなたの$ .getJSONコールの同期を行うことができます偽私はあなたの目標を達成するための他の方法を見つけることができる場合、同期ajax呼び出しを提唱しません。しかし、できなければ、そこに行く。 |

ライブ例:

はここであるため、非同期呼び出しのテストに失敗したコードの例ですライブソース(ライブリンクは、もはやためJSBinへの変更の仕事)

jQuery(function($) { 
    // This version doesn't work, because the window.open is 
    // not during the event processing 
    $("#theButton").click(function(e) { 
    e.preventDefault(); 
    $.getJSON("http://jsbin.com/uriyip", function() { 
     window.open("http://jsbin.com/ubiqev"); 
    }); 
    }); 
}); 

そして、ここでは同期呼び出し使用して、作業を行う例を示します

ライブの例を|ライブソース(JSBinの変更によりライブリンクが機能しなくなりました)

jQuery(function($) { 
    // This version does work, because the window.open is 
    // during the event processing. But it uses a synchronous 
    // ajax call, locking up the browser UI while the call is 
    // in progress. 
    $("#theButton").click(function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url:  "http://jsbin.com/uriyip", 
     async: false, 
     dataType: "json", 
     success: function() { 
     window.open("http://jsbin.com/ubiqev"); 
     } 
    }); 
    }); 
}); 
+0

help @Jasimありがとうございます。非同期と非同期のajaxに関する詳細な調査 – Amran

関連する問題