是否有Firefox扩展能够阻止页面中嵌入式javascript的单个功能?
<html>
<head>
<script type='text/javascript'>
function onLoad(){
setTimeout(annoying, 1800000);
}
function annoying(){
//do something annoying
}
function useful(){
//do something useful
}
</script>
</HEAD>
<BODY onload="onLoad()">
<!--rest of page goes here-->
</BODY>
</HTML>
答案 0 :(得分:2)
也许Greasemonkey是要走的路。
下面的答案是非常详细的技术,如果我走得太远,抱歉;)
这取决于脚本如何使用函数annoying()
。我还不是JavaScript的专家,一些经验丰富的人的声音可能很有用。
如annoying()
,window.setInterval()
等函数使用window.setTimeout()
,您可能无法直接覆盖该函数,因为JavaScript带有范围(闭包)的怪癖。执行代码window.setTimeout(annoying, 600)
时,对&#34; old&#34;的引用annoying
已存储,并且已经存储了#34}版本已执行。然后,您可能会尝试删除window.setTimeout
上正在调用 annoying
的代码。
在其他情况下,您可以添加一个具有相同名称的函数,并事实上使用以下Greasemonkey用户来覆盖该函数:
function addScript(sourceCode)
{
var script = document.createElement('script');
script.innerHTML = sourceCode;
var head = document.getElementsByTagName("head")[0];
head.insertBefore(script, head.firstChild); // insert the script as a first child of <HEAD>
}
addScript('function annoying(){alert("overwritten")}');
如果您有类似下面的代码(我无法提供实时演示,因为它在JSFiddle上的工作方式不同可能是因为它的沙盒),并且上面的用户脚本是针对该域启动的,那么在页面加载后600毫秒后,您将有&#34;令人讨厌的警报&#34;提醒,但是当你点击文字时,你将被覆盖&#34;覆盖&#34;警报。
<html>
<head>
<script type='text/javascript'>
function annoying(){
alert("Nasty alert");
}
function useful(){
//do something useful
}
window.setTimeout(annoying, 600); // closure; binds to the function as it is at the moment of execution
</script>
</head>
<body>
<a onclick="annoying()">Click me</a>
</body>
</html>
答案 1 :(得分:1)
我知道如何每页阻止它...我在这里有一个麻烦的脚本:
<script type="text/JavaScript">
<!--
function timedRefresh(timeoutPeriod) {
setTimeout("location.reload(true);",timeoutPeriod);
}
// -->
</script>
</head>
<body onload="JavaScript:timedRefresh(300000);">
这些白痴拒绝考虑的是,如果我正在寻找解决方案,我最终可以打开这些页面中的10个以上,然后90%的CPU时间用于在后台刷新页面! GRR
我有用于Web开发的firebug,我只需将这个JS命令输入控制台
timedRefresh = function(value){alert(value);}
微笑,点击确定,然后继续前进。
答案 2 :(得分:1)
我在这里发布了一个解决方案:https://stackoverflow.com/a/9699686/6355
由于它仅仅是一个链接,它再次出现:http://userscripts.org/scripts/show/125936
答案 3 :(得分:0)
这无济于事,反而加剧了这个问题。
如果启用了javascript,以下内容特别有害且难看:
<script>
setInterval("alert('irritate')",10)
</script>
或
<script>
(function(){(function r(){alert('irritate');setTimeout(r,10)})()})()
</script>
虽然可以通过以下方式停止(以及所有未来的TimeOuts):
javascript:setTimeout=function(){}
可能作为书签的URI,只要它可以足够快地点击 然而,
setInterval("alert('irritate')",10)
只能通过
停止javascript:setInterval=function(){}
在脚本运行之前。
祝你好运:<script>
(function(){(function r(){alert('irritate');r()})()})()
</script>
甚至更简单
<script>
( function r(){alert('irritate');r()} ) ()
</script>
设置alert=function(){}
将停止所有消息,但脚本及其r
的递归在SO或系统超时之前不会停止。此外,r
不在全球环境中,因此r=function(){}
无效。
有些FF版本需要一个有趣的解决方案,如果alert
响应是必需的,可以在SO上找到,通过使用ctrl-F4
来杀死令人烦恼的页面,而无需杀死浏览器和其他打开的标签页关闭违规页面的标签。为了帮助快速完成此操作所需的手动反射和灵活性,ctrl-Enter
用于响应提示,同时按下ctrl-Enter
F4
。