Detect if an alert or confirm is displayed on a page
If you wanted to run some code when an alert()
fires, you could try something like this:
I've only tested in Chrome, so I'm not sure about browser support.
Example: 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');
Of course this only lets you run code before and after an alert. As @kander noted, javascript execution is halted while the alert is displayed.
No there is not. You can check that the return value of a confirm
command is indeed true
or false
but you cant check whether there visually there.
These things are part of the browser not part of the DOM. I'm sure there's a dirty hack that works for IE because it's a bastardized child of the windows OS.
You could do this if you want to...
(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')); };}());
The downside to this is that
- you're hacking a host method of a browser (stuff you shouldn't typically do - http://perfectionkills.com/whats-wrong-with-extending-the-dom/)
- you should just be better keeping track of your
alert()
confirm()
usage, haha