有没有办法使用 JavaScript 或 jQuery 来检测是否正在显示确认或警告框?
检测页面上是否显示警报或确认
IT技术
javascript
jquery
alert
2021-02-20 16:21:05
6个回答
如果你想在alert()
触发时运行一些代码,你可以尝试这样的事情:
我只在 Chrome 中测试过,所以我不确定浏览器支持。
示例: http : //jsfiddle.net/Q785x/1/
(function() {
var _old_alert = window.alert;
window.alert = function() {
// run some code when the alert pops up
document.body.innerHTML += "<br>alerting";
_old_alert.apply(window,arguments);
// run some code after the alert
document.body.innerHTML += "<br>done alerting<br>";
};
})();
alert('hey');
alert('you');
alert('there');
当然,这只允许您在警报之前和之后运行代码。正如@kander 所指出的,在显示警报时 javascript 执行会停止。
不,那里没有。您可以检查confirm
命令的返回值是否确实存在true
,false
但无法直观地检查是否存在。
这些东西是浏览器的一部分,而不是 DOM 的一部分。我确信有一个适用于 IE 的肮脏黑客,因为它是 Windows 操作系统的一个混蛋。
如果你愿意,你可以这样做...
(function () {
// remember the normal alert
var oldAlert = (function(){ return this.alert; }()),
oldConfirm = (function(){ return this.confirm; }());
// inject ourself into the window.alert and window.confirm globals
alert = function (msg) {
oldAlert.call(document, msg);
document.onAlert(msg);
};
confirm = function (msg) {
var result = oldConfirm.call(document, msg);
document.onConfirm(msg, result);
return result;
};
// these just chill and listen for events
document.onAlert = function (msg) {
window.console && console.log('someone alerted: ' + msg);
};
document.onConfirm = function (msg) {
window.console && console.log('someone was asked: ' + msg);
window.console && console.log('and they answered: ' + (msg ? 'yes' : 'no'));
};
}());
这样做的缺点是
- 你正在破解浏览器的主机方法(你通常不应该做的事情 - http://perfectkills.com/whats-wrong-with-extending-the-dom/)
- 你应该更好地跟踪你的
alert()
confirm()
使用情况,哈哈
确认和警报框正在阻止事件 - 显示这些时 Javascript 代码执行停止。所以不 - 据我所知,您无法检测当前是否正在显示一个。
如果您想检测这些是否被阻止。您将不得不对要显示的消息做自己的事情,但要覆盖本机警报/确认。
window.nativeAlert = window.alert;
window.alert = function (message) {
var timeBefore = new Date();
var confirmBool = nativeAlert(message);
var timeAfter = new Date();
if ((timeAfter - timeBefore) < 350) {
MySpecialDialog("You have alerts turned off, turn them back on or die!!!");
}
}
window.nativeConfirm = window.confirm;
window.confirm = function (message) {
var timeBefore = new Date();
var confirmBool = nativeConfirm(message);
var timeAfter = new Date();
if ((timeAfter - timeBefore) < 350) {
MySpecialDialog("You have alerts turned off, turn them back on or die!!!");
}
return confirmBool;
}
显然我已将时间设置为 3.5 毫秒。但是经过一些测试,我们只能在大约 5 毫秒内点击或关闭对话框