Javascript 在警报框弹出之前将其移除

Javascript 在警报框弹出之前将其移除,javascript,jquery,greasemonkey,Javascript,Jquery,Greasemonkey,我正在尝试删除一个外部站点上的警报框,其中包含了油脂猴和jQuery HTML: 我不认为使用jQuery可以解决这个问题,因为jQuery代码只有在页面加载且警报可见时才会触发($(document.ready) 我可以从DOM中删除警报元素吗? 如果警报出现,我是否可以发送按键(13=回车)来处理警报 谢谢。由于Greasemonkey是在页面之后加载的,并且脚本不是由任何事件触发的,因此我认为不可能实现您想要的内容。Greasemonkey在页面加载之前不会运行,因此使用Greasemon

我正在尝试删除一个外部站点上的警报框,其中包含了油脂猴和jQuery

HTML:

我不认为使用jQuery可以解决这个问题,因为jQuery代码只有在页面加载且警报可见时才会触发($(document.ready)

我可以从DOM中删除警报元素吗?
如果警报出现,我是否可以发送按键(13=回车)来处理警报


谢谢。

由于Greasemonkey是在页面之后加载的,并且脚本不是由任何事件触发的,因此我认为不可能实现您想要的内容。

Greasemonkey在页面加载之前不会运行,因此使用Greasemonkey是不可能的。如果您真的确定了,您可以使用类似于此技巧中使用的方法设置代理(例如)

如果您可以在其他代码调用
alert
之前运行自己的JavaScript,那么您需要执行以下操作:

window.backupAlert = window.alert;
window.alert = function () {return true};
(测试工作)

然后,您可以在自己的脚本中使用
backupAlert
功能代替
alert
,但是假定
alert
仍然存在的其他脚本将不会显示弹出窗口

原因是警报是窗口对象内部的一个函数;它不是文档中的标记或DOM对象


不,不能用JavaScript发送按键。这在全球范围内是正确的;您可以触发处理按键事件的函数,但不能发送OS click或keypress事件。

我不确定是否可以使用javascript执行此操作,因为js已经在呈现的页面上运行。我的第一个想法是在页面呈现之前捕捉它。比如PHP。将外部站点的内容读入字符串,去掉代码的警告行,然后显示页面

var node=document.getElementsByTagName('alert')
node.parentNode.removeChild(节点)

  • 它根本不起作用,因为“警报”不是节点,而是“脚本”。如果在显示警报之前执行了GreaseMonkey脚本,则必须执行以下操作:
var node=document.getElementsByTagName('script')[0]
var str=node.firstChild.textContent
var result=str.replace(/alert(“[\w\s.]*”);/,“”)
node.firstChild.textContent=结果

  • 在FireFox中测试。发生了什么-您查找第一个脚本标记(查找所有脚本标记很容易),然后获取其内容(代码),然后用空字符串替换警报,并将修改后的代码放回原处。在您的情况下,结果页面仍然会有heve脚本标记,但没有任何代码

希望这有助于解决有趣的问题。当警报弹出时,只需发送一个按键(Enter)如何?这可以用AutoHotkey来完成,但是用JavaScript?不,不幸的是没有按键发送机制。您可以检测并处理按键,也可以触发您定义的按键处理程序,但无法在网页之外(包括在警报窗口中、浏览器的其他区域等)模拟按键事件
// ==UserScript==
// @name        Remove Alert box
// @include     http://www.example.com/alert_remove/
// ==/UserScript==

var node = document.getElementsByTagName('alert');
node.parentNode.removeChild(node);

if(window.alert) {
    alert("ALERT DETECTED");  // No response.
}
window.backupAlert = window.alert;
window.alert = function () {return true};