【问题标题】:Load jquery dynamically before using jquery在使用 jquery 之前动态加载 jquery
【发布时间】:2015-02-24 14:44:08
【问题描述】:

我的脚本将用作第三方网站中的小部件,因此我不知道已加载 jquery 以及在第三方端加载了哪个版本的 jquery。

所以在加载下面的脚本之前,我想检查在 dom 准备好之后是否已经加载了最新的 jquery 1.11.1,如果没有,那么我想加载最新的 jquery 并在脚本下面运行。

script.js

   var $ = jQuery.noConflict( true );
             (function( $ ) {
                   $(document).ready(function() {
                       alert("Document Ready ");
                     });
            })($jy);

编辑 1

var addNewJQuery = function() {
    (function( $ ) {
       $jy = $;
       var invokeOriginalScript;

      $(document).ready(function() {
            ......my code here.....
     }):
  })(jQuery);

}

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    不确定这是否适合您,但看起来它正在工作。

    加载第二个 jQuery 文件后,您可能需要从标题中删除其他脚本。但它似乎适用于加载的两个脚本。

    我还添加了一个检查是否加载了 jQuery,如果没有加载,它将加载 jQuery。

    您也可以在fiddle 中找到相同的代码。

    var addNewJQuery = function() {
        //var jQ = jQuery.noConflict(true);
        (function ($) {
            $(document).ready(function () {
                alert("You are now running jQuery version: " + $.fn.jquery);
            });
        })(jQuery);
    };
    
    if ( typeof jQuery === 'undefined' ) {
        alert('no jQuery loaded');
        //throw new Error("Something went badly wrong!"); // now you could load jQuery
        loadScript('https://code.jquery.com/jquery-1.11.2.js', addNewJQuery);
    }
    
    if ($.fn.jquery !== '1.11.2') {
        console.log('detected other jQuery version: ', $.fn.jquery);
        loadScript('https://code.jquery.com/jquery-1.11.2.js', addNewJQuery);
    }
    
    
    function loadScript(url, callback)
    {
        // Adding the script tag to the head as suggested before
        var head = document.getElementsByTagName('head')[0];
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;
    
        // Then bind the event to the callback function.
        // There are several events for cross browser compatibility.
        script.onreadystatechange = callback;
        script.onload = callback;
    
        // Fire the loading
        head.appendChild(script);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

    【讨论】:

    • 我需要使用 var jQ = jQuery.noConflict(true);因为我的小部件还使用其他 js 库,它使用依赖于 jquery 的 jQ,如果 3rd 方 webiste 也使用相同的库,那么它会产生问题,所以我已经使用它并在其他库中替换了 $jQ
    • 如何使用 var jQ = jQuery.noConflict(true);用你给定的代码?
    • 你想用新加载的 jQuery 运行什么脚本?你能创建一个 jsFiddle 来显示问题吗?
    • 很难在浏览器源代码窗口中阅读您的页面。但是我看不到您在页面中加载了 requirejs 或者我错过了它。
    • datepicker 不适用于给定脚本 $("#dob").datepicker();您的解决方案运行良好。当我的小部件与 require js 一起使用时,它会产生问题。我得到的错误:未捕获的类型错误:未定义不是函数。我的小部件正在底部加载。检查链接ocuco-it.co.uk/test/jquery-noconflict-requirejs-master
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多