我正在开发一个项目,要求我的用户脚本在页面上运行,因为它们在不执行任何页面
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.