我正在尝试使用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)来处理警报?
感谢。
答案 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(节点);
var node = document.getElementsByTagName('script')[0];
var str = node.firstChild.textContent;
var result = str.replace(/ alert(“[\ w \ s。] *”); /,“”);
node.firstChild.textContent = result;
希望有所帮助
答案 3 :(得分:0)
我不确定是否使用javascript,因为js已经在渲染页面上运行。我的第一个想法是在页面呈现之前捕获它。和PHP一样。将外部站点的内容读入字符串并删除ALERT代码行,然后显示页面。