gpt4 book ai didi

javascript - 在浏览器中禁用 JS 时,setTimeout 在 Greasemonkey 用户脚本中不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 04:43:13 26 4
gpt4 key购买 nike

我正在从事一个项目,该项目要求我的用户脚本在呈现页面时在页面上运行,而不执行页面的任何 JavaScript。也就是说,我们需要在禁用 JavaScript 的情况下进行浏览。

当我尝试延迟脚本中函数的执行时,我遇到了一个问题。每当我调用 window.setTimeout 时,我传入的函数永远不会执行。

我想也许这个函数实际上是在 unsafeWindow 而不是窗口上被调用的。有什么解决方法吗?

我应该提到,当启用 JavaScript 时,对 setTimeout 的调用工作正常,并且我的脚本中的所有其他内容在不启用 JavaScript 的情况下工作正常。

感谢您的帮助!

最佳答案

尽管 Greasemonkey JavaScript 以提升的权限运行,正如 Pointy 所说,setTimeout 函数被附加到页面的 JavaScript 空间——根据需要包装在闭包中。 (在正常操作中,Greasemonkey 实例通常在任何计时器已设置、触发时消失。)

因此,如果页面的主要 JavaScript 被禁用,计时器将永远不会运行。

可能的解决方法:

  • 使用 GM_xmlhttpRequest 作为粗略延迟。您可以设置一个有意提取其响应的页面。所以代码如下:

    GM_xmlhttpRequest
    (
    {
    method: "GET",
    url: "http://YourTestServer.com/DelayService.php?Seconds=2",
    onload: function (response) {YourDelayedFunctionHere (); }
    }
    );

    会调用您设置的实用程序页面来为您延迟。

  • 使用 NoScript 禁用除主页之外的所有页面的 JavaScript。例如,对于页面 YourSite.com/testpage.htm,其中包含来自例如 *SpamGenerator.net 的脚本...允许来自 YourSite.com 的脚本,但阻止它们来自 SpamGenerator.net

关于javascript - 在浏览器中禁用 JS 时,setTimeout 在 Greasemonkey 用户脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355735/

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