2010-03-03 122 views
2

我想要删除与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)来处理警报吗?

谢谢。

回答

1

由于Greasemonkey在页面加载后脚本没有被任何事件触发,我认为这是不可能实现你正在寻找的。

6

在加载页面之前,Greasemonkey不运行,所以这对于Greasemonkey是不可能的。如果你真的确定了,你可以设置一个代理(例如squid),其方法类似于这个Upside-Down-Ternet技巧中使用的方法。

如果你能得到自己的JavaScript运行其他代码调用alert之前,那么你会想要做这样的事情:

window.backupAlert = window.alert; 
window.alert = function() {return true}; 

(测试工作)

然后,您可以使用backupAlert函数代替alert在您自己的脚本中,但假设alert仍然存在的其他脚本不会显示弹出窗口。

推理是这样的:alert对象是窗口对象内的函数;它不是文档中的标签或DOM对象。

不,你不能用JavaScript发送按键。这是全球真实的;您可以触发处理按键事件的功能,但不能发送OS点击或按键事件。

+0

有趣的解决方案。弹出Alert时只需发送按键(Enter)怎么样?它可以使用AutoHotkey完成,但使用JavaScript? – 2010-03-04 05:11:07

+0

不,很遗憾没有按键发送机制。您可以检测按键,并处理它们,你可以触发你定义的按键处理程序,但没有办法模仿的网页之外的按键事件(包括在警报窗口,在浏览器等其他领域) – Ricket 2010-03-04 05:42:45

0

我不确定用javascript来做它,因为js已经在渲染页面上运行了。我的第一个想法是在页面呈现之前抓住它。与PHP一样。将外部网站的内容读取到一个字符串中,然后剥离ALERT代码行,然后显示该页面。

1

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,并将修改后的代码放回原处。在你的情况下,结果页面仍然会保留脚本标记,但没有任何代码;

希望它有助于