如何阻止JS下载未完成

问题描述:

我通过将JS文件附加到HTML头来异步下载JS文件。 现在在html正文中,在使用JS文件之前,我想检查JS文件是否已经下载并存在于缓存中。 如果JS文件不存在于缓存中(例如:在互联网连接速度较慢的情况下),我想阻止它直到下载。 换句话说,如果JS下载不完整,我想模拟阻止JS下载的情况下的行为。如何阻止JS下载未完成

任何想法如何实现?

可以实例化的任何对象在JS文件和HTML文件,你可以检查,如果该对象可使用typeof运算所以如果typeof运算(X)是未定义的,你可以假设该文件还没有下载

如果你可以控制HTMl文件和JS文件:在已经加载的代码中的某处定义一个“回调”函数,并从JS文件的末尾调用它。例如功能:

<html> 
    <head> 
    <script> 
    function notify_file_is_loaded(identifier) { 
     if (identifier === 'somefile.js') { 
     // it's loaded! 
     // run the code that (in synchronous mode) you'd block for 
     } 
    } 
    </script> 
<!--- ... ---> 

和JS文件:

// somefile.js 
// some JS code goes here 
// ...snip... 
notify_file_is_loaded('somefile.js'); 
+0

就算我能找到的是JS还没有准备好,我怎么能等待它被下载。如果我不阻止,我会得到JS错误。 – user441258 2010-09-07 09:47:07

+0

我解决这个案子的方式是通过在头部触发异步下载,并在使用该JS之前,我尝试使用标签同步下载JS文件。如果第一个JS下载已经完成,则第二个下载从缓存中拾取Js,否则以下载方式下载。该JavaScript文件没有自我执行的代码,所以没有对象被实例化两次 – user441258 2010-09-07 09:48:38

获取JS同步来代替。只需在html > head附加一个脚本标签src="<script-location>",浏览器将同步执行此下载。

在这里玩: 这是一种糟糕的用户体验阻塞,直到有东西下载。如果您使用优雅降级原则编写代码,则页面应只激活可用的功能。你会让另一个Web开发人员承担这个责任吗?不,我不会 - 我会关闭该标签,并继续:)

是否按照JavaScript加载JavaScript文件?如果是这样,你应该能够使用onload事件处理程序中执行代码后的JavaScript文件已加载:

<script> 
    var js = document.createElement('script'); 
    js.onload = function() { 
     // your code goes in here 
    } 
    js.src = 'foo.js'; 
    document.body.appendChild(js); 

</script> 
+0

我在我的代码中很早就追加了JS。这会很早触发JS的异步下载。这是一个非常大的JS文件,需要大量的时间来下载和我的网站上的许多功能使用这个JS文件。现在,在任何功能使用此JS文件之前,我需要确保JS可用。一种选择是在检查下使用这个JS的代码来测试JS是否准备好,但是使用这个JS的代码是分散的。我正在寻找一个解决方案,在使用JS之前,我可以检查JS是否可用。如果JS不可用,我想阻止渲染以避免JS错误。 – user441258 2010-09-07 14:44:47