当用户点击触发window.open
的按钮时,我需要知道是否有稳定的API/方法在此之前了解用户是否主动使用弹出窗口拦截程序?
在某些情况下,用户并不知道/关注他们是否有弹出窗口拦截程序(阻止新窗口)。我想通过某个对话框或其他方式告诉他们点击“允许”以授权打开新窗口。
当用户点击触发window.open
的按钮时,我需要知道是否有稳定的API/方法在此之前了解用户是否主动使用弹出窗口拦截程序?
在某些情况下,用户并不知道/关注他们是否有弹出窗口拦截程序(阻止新窗口)。我想通过某个对话框或其他方式告诉他们点击“允许”以授权打开新窗口。
Window.open(...)
如果存在新窗口,则返回一个句柄。如果它没有新窗口的句柄,则说明该窗口被阻止了。
https://developer.mozilla.org/en-US/docs/Web/API/Window/open
来源:https://davidwalsh.name/popup-block-javascript
var windowName = 'userConsole';
var popUp = window.open('/popup-page.php', windowName, 'width=1000, height=700, left=24, top=24, scrollbars, resizable');
if (popUp == null || typeof(popUp)=='undefined') {
alert('Please disable your pop-up blocker and click the "Open" link again.');
}
else {
popUp.focus();
}
windows.open
,这样不会被弹出拦截器拦截。windows.open
后检查它是否被阻止是可能的。通常人们会这样做,而开发人员在添加任何额外服务功能时也会考虑到这一点。例如,我正在实现Twitter的数字身份验证系统。我使用了检查弹出命令执行失败后的消息,然后我就可以向用户显示一条消息以启用弹出窗口,但后来我发现上述解决方案更加整洁和清晰。如果window.open()不是由点击事件触发,它大多数情况下会被阻止。
To confirm the window has loaded:
var loaded = false;
function windowLoaded() {
alert("The popup loaded");
loaded = true
}
function pause(milliseconds) {
var dt = new Date();
while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
document.write("start...");
//open the window
var win = window.open("window.html");
// If window.open returned an object
if(win) {
win.onload = function() {
win.RunCallbackFunction = windowLoaded;
};
document.write("popup sent...");
pause(3000);
// Verify that out window loaded
if (loaded == false)
document.write("check you popup blocker!");
else
document.write("ok!");
}
else {
document.write("window.open() was blocked...");
}
var popupBlockerChecker = {check:function(b) {
var a = this;
b ? /chrome/.test(navigator.userAgent.toLowerCase()) ? setTimeout(function() {
a._is_popup_blocked(a, b);
}, 200) : b.onload = function() {
a._is_popup_blocked(a, b);
} : a._displayError();
}, _is_popup_blocked:function(b, a) {
0 == 0 < a.innerHeight && b._displayError();
}, _displayError:function() {
alert("Popup Blocker is enabled! Please add this site to your exception list.");
}};
使用方式将会像这样:
var popup = window.open("http://www.google.com.au", '_blank');
popupBlockerChecker.check(popup);
var popupBlockerChecker = {
check: function(popup_window){
var _scope = this;
if (popup_window) {
if(/chrome/.test(navigator.userAgent.toLowerCase())){
setTimeout(function () {
_scope._is_popup_blocked(_scope, popup_window);
},200);
}else{
popup_window.onload = function () {
_scope._is_popup_blocked(_scope, popup_window);
};
}
}else{
_scope._displayError();
}
},
_is_popup_blocked: function(scope, popup_window){
if ((popup_window.innerHeight > 0)==false){ scope._displayError(); }
},
_displayError: function(){
alert("Popup Blocker is enabled! Please add this site to your exception list.");
}
};
使用方法:
var popup = window.open("http://www.google.co.in", '_blank');
popupBlockerChecker.check(popup);
windows.open
。 - Gandalf the White