window.open弹出窗口在单击事件期间被阻止

Shp*_*ord 21 javascript jquery window

我最终需要做的是运行一个$.ajax()调用,然后在运行之后,打开一个新窗口.

用户单击"预览"按钮以保存其当前表单,然后打开一个新窗口,显示包含刚刚保存的数据的项目预览.

但是按原样,该window.open功能被弹出窗口阻止程序阻止.

这是我的代码的基本部分:

HTML:

<a href="/surveys/185/preview" class="preview" target="_blank">Preview</a>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$('.preview').live('click', function(event){
  save_survey($(this).attr('href'));
  event.preventDefault();
});

function save_survey(url) {
  $.ajax({
    type: "POST",
    url: form_url,
    dataType: 'json',
    data: form_data,
    success: function(data) {
      window.open(url, '_blank');
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

Igo*_*mov 68

我最近遇到了这个问题并发现了这个解决方法:

1)window.open在调用之前调用$.ajax并保存窗口引用:

var newWindow = window.open(...);
Run Code Online (Sandbox Code Playgroud)

2)在location保存的窗口引用的回调set 属性上:

newWindow.location = url;
Run Code Online (Sandbox Code Playgroud)

也许它也会帮到你.

  • 这非常聪明.我以为没有希望. (3认同)
  • 谢谢,你是我的英雄,爱你 (2认同)

alb*_*ein 13

弹出窗口阻止程序通常可以阻止显示的每个弹出窗口都不是由直接用户操作触发的,例如单击按钮或链接.

如果您在click事件中使用ajax请求,则会从click事件中触发异步请求,这就是为什么当ajax请求完成其工作并且您从事请求获得响应时您失去了机会触发一个window.open没有弹出窗口阻止程序阻碍,原始的点击事件,它在那个时候已经很久了.