当前位置:  开发笔记 > 编程语言 > 正文

动态加载JavaScript文件

如何解决《动态加载JavaScript文件》经验,为你挑选了7个好方法。

如何可靠地动态加载JavaScript文件?这将用于实现一个模块或组件,当'初始化'时,组件将根据需要动态加载所有需要的JavaScript库脚本.

使用该组件的客户端不需要加载

它在我测试的每个浏览器中都运行良好:IE6/7,Firefox,Safari,Opera.

更新: jQuery-less版本:



这很好......除非你试图加载jquery.
@MaulikGangani较旧的浏览器和html验证器会将其解释为结束脚本的令牌.

4> palehorse..:

我做的基本上与你做亚当的事情相同,但稍加修改以确保我附加到head标签以完成工作.我只是创建了一个include函数(下面的代码)来处理脚本和css文件.

此函数还会检查以确保尚未动态加载脚本或CSS文件.它不检查手动编码值,并且可能有更好的方法来做到这一点,但它达到了目的.

function include( url, type ){
    // First make sure it hasn't been loaded by something else.
    if( Array.contains( includedFile, url ) )
        return;

    // Determine the MIME-type
    var jsExpr = new RegExp( "js$", "i" );
    var cssExpr = new RegExp( "css$", "i" );
    if( type == null )
        if( jsExpr.test( url ) )
            type = 'text/javascript';
        else if( cssExpr.test( url ) )
            type = 'text/css';

    // Create the appropriate element.
    var tag = null;
    switch( type ){
        case 'text/javascript' :
            tag = document.createElement( 'script' );
            tag.type = type;
            tag.src = url;
            break;
        case 'text/css' :
            tag = document.createElement( 'link' );
            tag.rel = 'stylesheet';
            tag.type = type;
            tag.href = url;
            break;
    }

    // Insert it to the  and the array to ensure it is not
    // loaded again.
    document.getElementsByTagName("head")[0].appendChild( tag );
    Array.add( includedFile, url );
}


@palehorse,Mike和Muhd,是对的,它可能适用于你的项目,但那是因为"includedFile"和"Array"变量必须在你的项目的其他地方定义,这个代码本身不会运行,它可能是更好地编辑它,以便它可以在项目的上下文之外工作,或者至少添加一个注释来解释那些未定义的变量是什么(类型等)
includeFile未定义.

5> Naveed..:

另一个很棒的答案

$.getScript("my_lovely_script.js", function(){


   alert("Script loaded and executed.");
  // here you can use anything you defined in the loaded script

 });

/sf/ask/17360801/


我该怎么做才能让它适用于跨域?*(从http://web.archive.org/web/20140905044059/http://www.howtocreate.co.uk/operaStu ff/userjs/aagmfunctions.js`加载脚本)*

6> Adam..:

以下是我发现的一些示例代码...有没有人有更好的方法?

  function include(url)
  {
    var s = document.createElement("script");
    s.setAttribute("type", "text/javascript");
    s.setAttribute("src", url);
    var nodes = document.getElementsByTagName("*");
    var node = nodes[nodes.length -1].parentNode;
    node.appendChild(s);
  }



7> Muhd..:

如果你已经加载了jQuery,你应该使用$ .getScript.

这比其他答案有一个优势,因为你有一个内置的回调函数(以保证在依赖代码运行之前加载脚本),你可以控制缓存.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有