javascript - 推迟脚本执行一段时间

标签 javascript deferred-execution

在 JavaScript 中,是否可以推迟驻留在顶层闭包的自执行函数的执行? (为了让你理解,jQuery 使用了这个。它在全局范围内有一个自执行功能)

我的目标是使整个外部脚本稍后执行,而不推迟其下载,以便它尽快下载并在事件发生后执行(我决定该事件何时发生)。

我也发现了这个:
https://developer.mozilla.org/en-US/docs/DOM/element.onbeforescriptexecute

听起来像是我想要的“第 1 部分”。如果我取消,则脚本不会执行。但是……我以后如何有效地执行它?

注1:我完全无法控制该外部脚本,因此无法更改它。

注2:我和提出此请求的人都不关心 IE 是否因此类问题而变慢(是的,没错!他和我一样反对 IE)

编辑(附加信息):
@SLaks 服务器发送 apache 发送的默认 header (看起来如此)以及一个缓存控制 header ,以便缓存 12 小时。
从域规则的POV来看,它是跨域的。
我不允许更改其他服务器的定义。不过我可以尝试要求一下。

最佳答案

不幸的是,不可能使用 <script> 来执行此操作。标记,因为您无法获取以这种方式包含的外部脚本的文本,将其包装在代码中以延迟它。如果可以的话,这将通过跨站请求伪造 ( CSRF ) 打开一个全新的可能性世界。

但是,只要脚本托管在同一域名上,您就可以使用 AJAX 请求获取该脚本。然后你可以延迟它的执行。

$.ajax({
    url: '/path/to/myscript.js',
    success: function(data) {
        // Replace this with whatever you're waiting for to delay it
        $.ready(function() {
            eval(data);
        });
    }
});

编辑 我从来没有使用过$.getScript()自从我使用RequireJS以来,我自己用于包含脚本,所以我不知道它是否能满足您的需求,但请看一下:http://api.jquery.com/jQuery.getScript/

仅供引用 如果你想知道我所说的 CSRF 攻击,Check this out .

关于javascript - 推迟脚本执行一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755739/

相关文章:

javascript - JSON数组推送数组

javascript - &lt;script defer ="defer"> 到底是如何工作的?

javascript - Underscorejs 'defer'(或 setTimeout 1)无法持续工作

javascript - 在导出期间将组件连接到 redux 和多个库

javascript - 页面/ View 背景不模糊

JavaScript - Express - MongoDb - Mongoose findOneAndUpdate 返回未定义

.net - 重用 IEnumerable<T> 会导致错误结果,例如任何()

c# - 来自 aspx 页面中 javascript 函数的变量可在同一 javascript 函数中的 c# 代码中访问

javascript - 将 defer 属性添加到 javascript_include_tag Rails

c# - 为什么在 c# 中使用 "yield"关键字的延迟执行会出现不同的运行时行为?