推迟脚本执行一段时间

时间:2013-02-07 16:14:59

标签: javascript deferred-execution

是否有可能在javascript中推迟执行驻留在顶级关闭的自执行函数? (为了便于您理解,jQuery使用它。它在全局范围内具有自执行功能)

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

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

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

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

注2:我和谁请求这个并不关心IE是否由于这样的事情而缓慢(是的,真的!(s)他是像我这样的反IE)

编辑(附加信息):
@SLaks服务器发送apache发送的默认头文件(看起来似乎)加上缓存控制头文件,要求缓存12小时。
根据关于域的规则的POV,它是跨域的 我不允许更改其他服务器的定义。不过,我可以试着要求它。

1 个答案:

答案 0 :(得分:1)

不幸的是,使用<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/

<强> FYI 如果你想知道我在谈论CSRF攻击,Check this out