你可以为脚本使用替代来源吗?

8

在HTML5中,是否有可能为JavaScript提供备用来源?例如,我正在使用jQuery,并将其存储在本地。但是,我可以包括一个 alt 属性,以便如果它不起作用,Google的jQuery将被加载吗?

如果它起作用,代码看起来会像这样:<script src="enter your text here.js" alt="googlescode"></script>


有许多用JavaScript编写的脚本加载器。我们可以假设您想要一个静态HTML解决方案吗? - Álvaro González
当然可以,但这不是我的问题所在。 - tjons
3个回答

7

是的,你可以做到。 HTML5基础模板 提供了一个很好的jQuery加载示例。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script>

但是它的使用方式与此不同。如果谷歌脚本无法加载,则会退而使用本地脚本。
无论如何,你应该首先尝试加载CDN版本,因为它比“本地”版本加载得更快。

在我的电脑上,我发现本地加载速度更快。 - tjons
5
如果你在本地加载,当然会更快,但在实际的生产环境中并非如此。你可以阅读这篇文章,它解释了这种做法的好处。http://encosia.com/3-reasons-why-you-should-let-google-host-jquery-for-you/ - Sebsemillia

6
如果涉及到jQuery,你可能想看一下这篇文章: CDN失败后如何降级到本地jQuery
代码片段:
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-2.0.0.min.js"></script>
<script>
    if (typeof jQuery == 'undefined') {
        document.write(unescape("%3Cscript src='/js/jquery-2.0.0.min.js' type='text/javascript'%3E%3C/script%3E"));
    }
</script>

它运行得很完美,只是想知道是否也有CSS的解决方法? - Alireza Rinan

3
实施它们时,我意识到所有以前的答案都存在一个共同问题,即Chrome将阻止它们在慢连接下使用,因为document.write是一个同步函数。该问题在这篇文章中讨论。
解决方案通常是使用现代加载程序或预编译js代码。
然而,如果您的用例仍需要此方法,则需要使用异步调用。一个说明性的例子是Google Analytics的加载方式
基本上,上面的代码被翻译成:
    <script>window.jQuery || (function(){
        // Create the DOM node
        a=document.createElement('script');
        a.src="http://path-to-the-script.js";
        a.async=1;
        // Find a node, and insert the script before it
        m=document.getElementsByTagName('script')[0];
        m.parentNode.insertBefore(a,m);
    })()</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接