gpt4 book ai didi

javascript - 使用 Chrome 扩展程序停止执行函数

转载 作者:搜寻专家 更新时间:2023-11-01 04:19:38 24 4
gpt4 key购买 nike

这是一个简单的页面:

<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test page</title>
<script type="text/javascript">
function foo (num) {
alert(num);
}
</script>
</head>
<body>
Hello World
<script type="text/javascript">
foo(2);
</script>
</body>
</html>

我想写一个 Chrome 扩展来阻止底层脚本 (foo(2)) 的执行。
我试图编写一个内容脚本,它删除了最后一个脚本标签:

document.body.removeChild(document.body.lastChild);  

但它不起作用。

我认为这可能是因为内容脚本在最后一个脚本行执行后运行。然后我尝试将 run_at 设置为 document_startdocument_end,但它们都不适合我..

最佳答案

我在开发 Don't track me Google 的过程中遇到了同样的问题用户脚本/扩展。

#Important noteThe window object in a Chrome contentscript cannot be accessed directly, in any way.
I have tested many methods, and the only reliable method is injecting the code through a dynamically created script tag. Have a look at this answer, or my extension's source code for more information.

我用 Object.defineProperty 解决了这个问题.使用此方法,您可以定义一个属性,并指定有关 getter、setter 和属性描述符的信息。在你的情况下:

Object.defineProperty(window, 'foo', {
value: function(){/*This function cannot be overridden*/}
});

或者,如果您想捕获变量,并在以后使用它:

(function() {
var originalFoo = function(){/*Default*/};
Object.defineProperty(window, 'foo', {
get: function(){
if (confirm('function logic')) return function(){/*dummy*/};
else return originalFoo;
},
set: function(fn){originalFoo = fn;}
});
})();

## Chrome 17 中的错误 [错误 #115452](http://code.google.com/p/chromium/issues/detail?id=115452) [已修复!](http ://code.google.com/p/chromium/issues/detail?id=115452#hc4)在 Chrome 17 中,使用 V8 3.7.12.12(但不在 Chrome 16 中,使用 V8 3.6.6.19),**函数声明覆盖属性描述符**。
参见 http://jsfiddle.net/bHUag/
请注意,当函数声明和属性描述符方法位于同一 block 中时,此错误*似乎*不会应用。不过,这是错误的。效果是不可见的,因为函数声明总是在代码块之前计算。因此,首先评估 `function foo(){}`,然后是其余代码。
<script>
Object.defineProperty(window, 'foo', {value: function(){return 5;} });
</script><script>
function foo(){return 1};
alert(foo()); // Shows 5 in all browsers except for Chrome v17
</script>

关于javascript - 使用 Chrome 扩展程序停止执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com