弹出之前删除警告框

时间:2010-03-03 20:44:33

标签: javascript jquery greasemonkey

我正在尝试使用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中删除alert元素吗? 我是否可以发送按键(13 = Enter)来处理警报?

感谢。

4 个答案:

答案 0 :(得分:7)

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

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

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

(测试工作)

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

这样做的原因是警告是窗口对象内的函数;它不是文档中的标记或DOM对象。

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

答案 1 :(得分:1)

由于Greasemonkey是在页面之后加载的,并且脚本没有被任何事件触发,我认为不可能实现你想要的。

答案 2 :(得分:1)

  

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

  • 它根本不起作用,因为“alert”不是节点,而是“script”。如果您在显示警报之前设法执行GreaseMonkey脚本,则必须执行此操作:
  

var node = document.getElementsByTagName('script')[0];
  var str = node.firstChild.textContent;
  var result = str.replace(/ alert(“[\ w \ s。] *”); /,“”);

  node.firstChild.textContent = result;

  • 在FireFox中测试。那里发生了什么 - 你寻找第一个脚本标签(可以很容易地查看所有这些标签),然后你获取其内容(代码),然后用空字符串替换警报并将修改后的代码放回去。在你的情况下,结果页面仍然会有脚本标记,但没有任何代码;

希望有所帮助

答案 3 :(得分:0)

我不确定是否使用javascript,因为js已经在渲染页面上运行。我的第一个想法是在页面呈现之前捕获它。和PHP一样。将外部站点的内容读入字符串并删除ALERT代码行,然后显示页面。