当前对javascript还是陌生的,当我对自己的作业有想法时,我遇到了一些问题。
我不知道我们是否可以使用javascript检测警报?
我进行了搜索,发现了这个主题,但是并没有太大帮助。 Detect if an alert or confirm is displayed on a page
我尝试使用脚本https://i.imgur.com/w0ISrHC.png
解决验证码时遇到的问题我期望: 如果我们的脚本检测到“无法联系reCAPTCHA。请检查您的连接,然后重试。”
我们将刷新页面并检查,然后再次尝试解决验证码。
答案 0 :(得分:1)
我认为打开警报后,您将不会知道并运行任何脚本。 打开控制台并运行间隔进行测试:
setInterval(() => console.log('test'), 1000);
然后运行:
alert(1);
您将看到在关闭警报之前,该间隔不会记录为“测试”。
要执行此操作,您可能需要创建另一个将在另一个选项卡中运行的应用程序,并向其发送消息。如果另一个应用程序将检测到超时-那么您可以重新加载页面。
更新
或者您可以覆盖警报并在警报调用时重新加载页面:
window.alert = () => location.reload();
答案 1 :(得分:0)
尝试this fiddle。我对警报功能进行了修改,然后您可以检查消息以注入您的东西。
(function (window) {
const _alert = window.alert
window.alert = (message) => {
window.onAlert && window.onAlert(message, _alert)
}
})(window)
function createRecaptcha() {
grecaptcha.render("recaptcha", {sitekey: "6LcgSAMTAAAAACc2C7rc6HB9ZmEX4SyB0bbAJvTG", theme: "light"});
}
createRecaptcha();
window.onAlert = (message, alert) => {
if(message === 'Cannot contact reCAPTCHA. Check your connection and try again.') {
// do your stuffs, for example:
document.body.innerHTML = '<h1>The alert is injected</h1>'
return
}
alert(message)
}
alert('application alert')
答案 2 :(得分:0)
有趣的问题,我有一些简单的解决方案可以防止发出警报。 首先,我收集并记住什么是原点警报原型方法。 我覆盖警报。其他程序很简单...
window["cloneOriginAlert"] = alert;
alert = function (msg, prevent) {
if ( typeof prevent !== 'undefined') { return; }
var test = prompt("You wanna see alert ? ", "Alert is comming !!! ");
if (test != null) {
console.warn("Alert is allowed here ! ", msg)
window["cloneOriginAlert"](msg);
} else {
console.log("No alert here")
}
}
alert("Hello bug")
我希望这就是你想要的!