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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...