取消覆盖JavaScript函数



我制作了UserScripts,现在卡住了。

在我的HTML中有一个script标签,在script标签中有以下内容:

<script>
setTimeout = function(){}
</script>

没有办法使用这个函数,它是无用的。

我该如何解决这个问题?

我在想用一种方法来设置像main = setTimeout()这样的函数,我可以在脚本加载后重置它。回到喜欢的setTimeout = main

我也试图保持(大部分)不被发现,不像在不同的环境(如iframe)中运行所有代码。我知道你可以只使用setInterval,然后打破循环,但这只是一个例子。

在页面有机会覆盖它之前运行您的userscript。在元数据块中使用// @run-at document-start(与Tampermonkey配置的高级部分中的即时脚本注入相结合),然后您可以在用户脚本中执行以下操作:

const origSetTimeout = window.setTimeout;
// proceed with your script, referencing origSetTimeout

即使在页面加载并覆盖原始setTimeout之后仍将继续工作。(虽然您可以稍后将window.setTimeout重新分配回原始值,但这将是可检测的-如果这真的是一个问题。)

在userscript中声明的变量,即使是在顶层,也不会泄漏到页面范围,所以不用担心origSetTimeout会被暴露——尽管userscript中执行的其他操作可以被检测到。

最新更新