谷歌浏览器似乎阻止了我通过jQuery创建的弹出窗口。经过一番调查,window.open在ajax调用成功的情况下,调用似乎是一个问题。有没有解决的办法?我的jQuery ajax调用返回要打开的URL。所以我有点卡住。
window.open
如果我将window.open外部ajax调用置于外部,它将起作用;但是,在内部(即成功事件中)它被阻止。我认为这与上下文有关,但我不确定。
这是我所拥有的:
window.open("https://www.myurl.com"); // OUTSIDE OF AJAX - no problems // with popup $.ajax({ type: "POST", url: "MyService.aspx/ConstructUrl", data: jsonData, contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Normally loads msg.d which is the url returned from service // static url below is for testing window.open("https://www.myurl.com"); // THIS IS BLOCKED }, error: function(msg) { // alert(error); } });
只需在成功回调中打开新窗口:
$.ajax({ type: "POST", url: "MyService.aspx/ConstructUrl", data: jsonData, contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { window.open("https://www.myurl.com"); }, error: function(msg) { //alert(error); } });
请注意,您可能必须为此将$ .ajax的async选项设置为false,否则$ .ajax调用之后的代码可以在收到响应之前进行评估。