包含外部<script>并防止多次加载jQuery

时间:2015-07-01 08:00:20

标签: javascript jquery

我必须将外部网站的脚本包含到我的网站中。

&#xA;&#xA;
 &lt; script src ='http://widgets.something.de / clientidblablabla?parameters = 2324'type ='text / javascript'&gt;&lt; / script&gt;&#xA;  
&#xA;&#xA;

太糟糕了,那就是那个脚本他们还包括jQuery 1.4.1。因为到目前为止我使用的是jQuery 1.8.3,所以我的一些脚本会破坏。

&#xA;&#xA;

有没有办法阻止加载外部jQuery文件?我可以使用url http://widgets.something.de/resources/jquery-1.4.1.js 并阻止它?

&#xA;&#xA; < p>虽然这个脚本非常庞大,但只需要在台式计算机上使用。如何将&lt; script src =“”&gt; 标记实现到 if($(window).width()&gt; 768px){// fire script};

&#XA;

2 个答案:

答案 0 :(得分:2)

我认为你可以简单地使用另一个别名加载你的jquery并让插件使用公共别名$

通常是加载所有插件并在需要时使用它们。所以if($(window).width() > 768) { // fire script }听起来不错。另一种方法是使用jQuery getScript()方法,它允许您异步加载脚本:

(function(j){

    if( $(window).width() > 768 ){
        j.getScript('http://widgets.something.de/clientidblablabla?parameters=2324', function(){
            // script loaded, you can play with it from here
        });
    }
})(jQuery);

修改

我做了一个例子(jsFiddle)来更好地解释它。

(function(j213){

    // right now j213 and $ are aliases of the same version (2.1.3)
    j213('body').append( 'j213 = ' + j213().jquery + '<br/>' );
    $('body').append( '$ = ' + $().jquery + '<br/>' );

    j213.getScript('https://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js', function(){

        // once another version of jQuery has been loaded, $ becomes an alias for 1.4.1 while j213 still holds for 2.1.3
        $('body').append( '$ = ' + $().jquery + '<br />' );    

        // you can also remove an alias
        delete $; // or $ = undefined; 
                  // or $ = null;
                  // or $ = 'whatever you want';

        j213('body').append(typeof($) + '<br />'); // returns undefined

        // or assign a new one easily
        $ = jQuery; // $ is now 1.4.1 - the last jQuery loaded
        $('body').append( '$ = ' + $().jquery + '<br />' );

        $ = j213; // $ is now 2.1.3
        $('body').append( '$ = ' + j213().jquery + '<br />' );

    });


})(jQuery);

答案 1 :(得分:1)

如果jQuery 1.4.1与您正在加载的小部件位于同一个文件中,我认为无法加载它。但是你可以先在浏览器中删除jQuery 1.4.1,先加载那个小部件,然后“删除”$jQuery变量(delete $; delete jQuery;)和然后加载你的jQuery 1.8.3。

您可以使用document.write有条件地加载文件,或者通过XHR-Request加载文件并将其传递给eval()