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

前端之家收集整理的这篇文章主要介绍了javascript – 在浏览器中禁用JS时,setTimeout在Greasemonkey用户脚本中不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个项目,要求我的用户脚本在页面上运行,因为它们在不执行任何页面 JavaScript的情况下呈现.也就是说,我们需要禁用JavaScript浏览.

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

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

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

谢谢你的帮助!

解决方法

尽管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相关文章