pet*_*ter 7 javascript greasemonkey settimeout
我正在开发一个项目,该项目要求我的用户脚本在页面上运行,而不会执行任何页面的JavaScript.也就是说,我们需要禁用JavaScript浏览.
当我尝试延迟脚本中的函数执行时,我遇到了一个问题.每当我打电话时window.setTimeout,我传入的函数永远不会被执行.
我想也许这个函数实际上是调用unsafeWindow而不是窗口.这有什么解决方法吗?
我应该提一下,setTimeout当启用JavaScript并且我的脚本中的其他所有内容在没有启用JavaScript的情况下工作正常时,调用工作正常.
谢谢你的帮助!
正如 Pointy 所说,尽管 Greasemonkey JavaScript 以提升的权限运行,setTimeout但函数仍会附加到页面的 JavaScript 空间中——根据需要包装在闭包中。(在正常操作中,油猴实例通常在任何计时器设置、触发时就消失了。)
因此,如果页面的主要 JavaScript 被禁用,计时器将永远不会运行。
可能的解决方法:
用作GM_xmlhttpRequest粗略的延迟。您可以设置一个页面来故意绘制其响应。所以代码如下:
GM_xmlhttpRequest
(
{
method: "GET",
url: "http://YourTestServer.com/DelayService.php?Seconds=2",
onload: function (response) {YourDelayedFunctionHere (); }
}
);
Run Code Online (Sandbox Code Playgroud)
将调用您设置的实用程序页面来为您执行延迟。
使用 NoScript 禁用除主页之外的所有页面 JavaScript。例如,对于页面YourSite.com/testpage.htm,其中包含来自*SpamGenerator.net 的脚本...允许来自YourSite.com的脚本,但阻止来自SpamGenerator.net 的脚本。
| 归档时间: |
|
| 查看次数: |
5258 次 |
| 最近记录: |