jquery window.open在ajax成功被阻止

尝试在我的ajax成功调用中打开一个新的浏览器窗口,然而,它被阻止为弹出窗口。 我做了一些搜索,发现用户事件需要绑定到window.open才能实现。

我还找到了这个解决方案,你在ajax之前打开一个空白窗口,然后在成功调用中正常加载url。

所以我有两个问题:

1 – 这是唯一的解决方案,因为我不想打开这个空白窗口。

2 – 如果这确实是唯一的方法,那么我如何在这个新窗口中添加加载html? 例如,如果我的ajax没有成功,我怎么能将我的错误文本添加到这个空白窗口,因为不会打开url?

我还应该注意,我不想让ajax调用同步…这会打败ajax的目的,我相信如果不是已经弃用了……如果我在搜索中读错了,请纠正我。

$('#user-login').on('click', function () { var $form = $(this).closest('form'); window.open('about:blank', 'myNewPage'); $.ajax({ type: 'post', url: '/spc_admin/process/p_user_login.php', data: $form.serialize(), dataType : 'json' }).done(function (response) { $myElem = $('#user_login_message'); //performance for not checking dom $myElem.fadeOut('fast', function(){ if (response.success) { $myElem.html('

Success!  You have been logged in as \''+response.username+'\' in a new browser window.

').fadeIn('fast'); // open new window as logged in user //window.open('http://www.example.com/'); window.open('http://www.example.com/', 'myNewPage'); } else { $myElem.html('

Error!  Please select a valid user from the dropdown list.

').fadeIn('fast'); } }); }); });

编辑:

对于任何有兴趣的人……这是我提出的解决方案。 新窗口需要一个名称,因此连续的点击将在同一窗口中打开,而不是重复打开新的。 添加html与答案中给出的有点不同,这是有效的。 窗口模糊不起作用,因此不存在。 从我能找到的,这是不可控制的,是一个浏览器的东西。

  $('#user-login').on('click', function () { var $form = $(this).closest('form'); //open blank window onclick to prevent popup blocker var loginWindow = window.open('', 'UserLogin'); $.ajax({ type: 'post', url: '/spc_admin/process/p_user_login.php', data: $form.serialize(), dataType : 'json' }).done(function (response) { $myElem = $('#user_login_message'); //performance for not checking dom $myElem.fadeOut('fast', function(){ if (response.success) { // show success $myElem.html('

Success!  You have been logged in as \''+response.username+'\' in a new browser window.

').fadeIn('fast'); // open new window as logged in user loginWindow.location.href = 'http://www.example.com/'; } else { // show error $myElem.html('

Error!  Please select a valid user from the dropdown list.

').fadeIn('fast'); // add error to the new window (change this to load error page) loginWindow.document.body.innerHTML = '

Error!  Please select a valid user from the dropdown list.

'; } }); });

要在onclick打开的窗口中打开新URL,请执行以下操作

  1. 将您创建的新窗口存储在变量var newWindow = window.open("","_blank");
  2. 更改新窗口的位置newWindow.location.href = newURL;

为改善用户体验可以做的另一件事是在打开后立即将新窗口发送到后台( newWindow.blur ),然后再次将它带到前台( newWindow.focus ),同时打开新窗口的URL。

做一个window.open("about:blank", "newPage"); 在AJAX调用之前,然后在调用之后通过调用window.open("http://google.com", "newPage");将URL添加到打开的窗口window.open("http://google.com", "newPage");