Javascript 您能否自动在两个选项中进行选择<;脚本src="&引用&燃气轮机;文件夹?

Javascript 您能否自动在两个选项中进行选择<;脚本src="&引用&燃气轮机;文件夹?,javascript,jquery,html,Javascript,Jquery,Html,假设您正在实现一个大量使用jQuery的网站。你可以把一些代码 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 并从某个存储库导入它。如果您在没有internet的情况下开发它,您可以下载源代码并将其存储在本地某个位置,然后使用类似 <script src="js/jquery-1.10.2.min.js"></scri

假设您正在实现一个大量使用jQuery的网站。你可以把一些代码

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

并从某个存储库导入它。如果您在没有internet的情况下开发它,您可以下载源代码并将其存储在本地某个位置,然后使用类似

<script src="js/jquery-1.10.2.min.js"></script>


但是有没有一种简单的方法可以同时拥有这两种功能呢?例如,如果您可以访问存储库,请使用它,但如果您不能使用本地副本。

引用CDN上脚本的故障安全方法是仅在CDN因任何原因失败时链接到本地副本

实现这一点的方法只是检查脚本中是否执行了任何内容。对于jQuery,这只是检查jQuery是否存在:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<script type="text/javascript">
    if (!window.jQuery) document.write('<script type="text/javascript" src="/path/to/jquery-ver.sion.min.js"><\/script>');
</script>

如果(!window.jQuery)document.write(“”);

就我个人而言,我从来没有因为CDN离线而导致脚本失败,但我也有过一段时间的互联网中断。通过使用适当的回退设置脚本,我能够继续本地开发,因为页面仍然可以工作,而无需连接到CDN。

检查第一个脚本中的变量。如果未找到,请使用document.write创建第二个脚本标记。下面是我找到的jQuery示例:


!window.jQuery和document.write(“”)

如果所需资源不可用,您可以动态添加资源。例如:

<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script type="text/javascript"> 
        if( typeof $ != "function")
        {
            var head= document.getElementsByTagName('head')[0];
            var script= document.createElement('script');
            script.type= 'text/javascript';
            script.src= 'js/jquery-1.10.2.min.js';
            head.appendChild(script);
        }
        </script>

</head>
<body>
</body>
</html>

if(类型$!=“函数”)
{
var head=document.getElementsByTagName('head')[0];
var script=document.createElement('script');
script.type='text/javascript';
script.src='js/jquery-1.10.2.min.js';
head.appendChild(脚本);
}

尽管托管在Google CDN上的JQuery应该足够安全,但下面的代码可以作为requireJS的备用代码

requirejs.config({
    enforceDefine: true,
    paths: {
        jquery: [
            '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js',
            'js/jquery-ui.min.js'
        ]
    }
});

require(['jquery'], function ($) {
});

如果您在本地拥有它,为什么要下载它…?对我来说毫无意义。如果您只在本地调用脚本会更好,因为您可以管理更少的http请求。@C-linkNepal,不,最好使用大量缓存的引用,尤其是当用户很可能已经从其他网站链接到共享资源的脚本时。在许多情况下,这将导致没有HTTP请求,因为副本将从缓存中提取。的可能副本
requirejs.config({
    enforceDefine: true,
    paths: {
        jquery: [
            '//ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js',
            'js/jquery-ui.min.js'
        ]
    }
});

require(['jquery'], function ($) {
});