2012-02-07 65 views
1

我已经有好几个JavaScript文件与我的许多页面一起加载,耗费了数十千字节的数据下载量。其中一个版本是jquery.min.js,虽然缩小了,但仍然是25kb左右。是否有可能延迟加载Jquery(而不是插件)?

我的问题是,大量的手机不支持JavaScript,所以下载这个和其他JS文件是浪费数据。反正通过在调用JS文件的页面中添加一个<script>标签来延迟加载JQuery文件,显然只有在浏览器支持JavaScript时才会执行该JavaScript代码,这只有在下载它时才有意义?

+1

如果浏览器不支持JavaScript,我不认为它会下载脚本,Firefox不会。 – 2012-02-07 21:23:21

+0

我刚刚用Firefox和Firebug进行了测试。看起来你是对的(我不知道这一点,谢谢)。移动浏览器的明确答案将令人欣慰。 – Simpleton 2012-02-07 21:27:43

+0

如果您有权访问服务器的访问日志,则可以在发出请求时观看它。 – Umbrella 2012-02-07 21:32:06

回答

3

要加载脚本文件只有在一定条件下,我用类似:

<script type="text/javascript"> 
    document.write('<scr'+'ipt type="text/javascript" src="/js/jquery.min.js"></scr'+'ipt>'); 
</script> 

注:这仅适用内嵌,文件加载完成,document.write()的都会有不想要的效果了。

注2:打破'</script>'(如'</scr'+'ipt>')非常重要,以免浏览器的解析器误认为您的真实脚本块已结束。我以同样的方式为开头脚本标记做好标记。

+2

Nice snippet :)很好解释为什么你使用'Scr'+'ipt'而不是'脚本'(我知道为什么,我只是认为它应该在你的文章中解释) – KOGI 2012-02-07 21:33:43

0
function loadScript(filename) { 
    var t = document.createElement('script'), 
     s = document.getElementsByTagName('body')[0]; 

    t.type = 'text/javascript'; 
    t.async = true; 
    t.src = filename; 
    s.parentNode.appendChild(t); 
} 

// If and when jQuery is needed, you'd load it with: 
loadScript('http://code.jquery.com/jquery.min.js'); 
+0

这将工作,但只有在文档中已经有一个脚本标签。如果没有其他脚本被包含,这将失败。 – KOGI 2012-02-07 21:34:50

+0

非常正确。解决方案现在附加到'body'。 – osahyoun 2012-02-07 21:38:02

相关问题