弹出之前删除警报框
我想要删除与Grease Monkey和jQuery的外部网站上的警报框。弹出之前删除警报框
HTML:
<!DOCTYPE html>
<html>
<body>
<script>alert("Remove this Alert box with GreaseMonkey.");</script>
<p>Hello world</p>
</body>
</html>
的GreaseMonkey脚本(目前没有jQuery的一部分):
// ==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.
}
我不认为这是可以使用jQuery因为jQuery代码仅触发时,页面被解决已加载并且警报可见($(document).ready)。
我可以从DOM中删除警报元素吗?
如果出现警报,我可以发送按键(13 = Enter)来处理警报吗?
谢谢。
由于Greasemonkey在页面加载后脚本没有被任何事件触发,我认为这是不可能实现你正在寻找的。
在加载页面之前,Greasemonkey不运行,所以这对于Greasemonkey是不可能的。如果你真的确定了,你可以设置一个代理(例如squid),其方法类似于这个Upside-Down-Ternet技巧中使用的方法。
如果你能得到自己的JavaScript运行其他代码调用alert
之前,那么你会想要做这样的事情:
window.backupAlert = window.alert;
window.alert = function() {return true};
(测试工作)
然后,您可以使用backupAlert
函数代替alert
在您自己的脚本中,但假设alert
仍然存在的其他脚本不会显示弹出窗口。
推理是这样的:alert对象是窗口对象内的函数;它不是文档中的标签或DOM对象。
不,你不能用JavaScript发送按键。这是全球真实的;您可以触发处理按键事件的功能,但不能发送OS点击或按键事件。
我不确定用javascript来做它,因为js已经在渲染页面上运行了。我的第一个想法是在页面呈现之前抓住它。与PHP一样。将外部网站的内容读取到一个字符串中,然后剥离ALERT代码行,然后显示该页面。
var node = document.getElementsByTagName('alert');
node.parentNode.removeChild(node);
- 它不会在所有的工作,因“警戒”是不是一个节点,但“脚本”是。如果你管理的结果显示警报之前执行您的GreaseMonkey脚本,你必须这样做,而不是:
VAR节点=文件。的getElementsByTagName( '脚本')[0];
var str = node.firstChild.textContent;
VAR结果= str.replace(/警报( “[\ W \ S。] *”);/“”);
node.firstChild.textContent = result;
- 在FireFox中测试。那里发生了什么 - 你寻找第一个脚本标记(可以很容易地完成所有的脚本标记),然后你获取它的内容(代码),然后用空字符串替换alert,并将修改后的代码放回原处。在你的情况下,结果页面仍然会保留脚本标记,但没有任何代码;
希望它有助于
有趣的解决方案。弹出Alert时只需发送按键(Enter)怎么样?它可以使用AutoHotkey完成,但使用JavaScript? – 2010-03-04 05:11:07
不,很遗憾没有按键发送机制。您可以检测按键,并处理它们,你可以触发你定义的按键处理程序,但没有办法模仿的网页之外的按键事件(包括在警报窗口,在浏览器等其他领域) – Ricket 2010-03-04 05:42:45