How do I prevent Google Chrome from blocking my popup?
Yes, popups should be a direct result of a user action. Doing them in ajax callback will not do the trick. Also, using async:false
is bad - in FF it is known to block the whole browser. Think of some other way to do the check:
- it could be the first thing you do in the popup
- you can open the popup on click and manipulate it later when the callback fires
- you can require the user to click again some button to trigger the popup (probably the worst solution)
- you can do it on page load
Following up on Emil's excellent answer, "you can open the popup on click and manipulate it later when the callback fires". I used this implementation.
$('#attackButton').click(function() {
New code here
var win = window.open(''); window.oldOpen = window.open; window.open = function(url) { // reassignment function win.location = url; window.open = oldOpen; win.focus(); }
end new code
$.ajax({ url: baseurl + '/index.php', data: { 'gameid': 618 }, type: 'POST', success: function(data) { window.open('some url'); // will call reassignment function above } }); return false;});
You can open a window that is not blocked just under the onclick event, if you open it on ajax call it is considered popup. However I used this method with success for some time to open a popup and not be blocked.
http://en.nisi.ro/blog/development/javascript/open-new-window-window-open-seen-chrome-popup/