动态加载JavaScript?

时间:2013-06-10 11:22:24

标签: javascript html html5

在我的项目要求中,我需要动态添加java脚本 我有一个js文件global.js,它包含我想动态添加的所有全局变量。 我还想在util.js(使用global.js中定义的变量)之前添加global.js,这是没有发生的

如果我打开页面源代码,我看不到添加的global.js 我也希望这可以在所有浏览器中工作,主要在ie6和ie8

我的代码Index.html

<script src="../fw.ui.lib/resources/sap-ui-core.js" id="sap-ui-bootstrap"
                  data-sap-ui-libs="sap.ui.commons, sap.ui.table, sap.ui.ux3"
                  data-sap-ui-theme="sap_goldreflection">

            </script>

            <script src="../fw.ui/js/application_properties.js"      type="text/javascript"></script>
            <script src="../fw.ui/js/header.js" type="text/javascript"></script>
            <script src="../fw.ui/js/dao/userDAO.js" type="text/javascript"></script>
            <!-- add sap.ui.table,sap.ui.ux3 and/or other libraries to 'data-sap-ui-libs' if required -->
            <script src="js/controls/DynamicJsLoad.js" type="text/javascript"></script>
            <script></script>
            <script>addScriptDynamically()</script>
 <script src="js/controls/util.js" type="text/javascript"></script>

DynamicJsLoad.js

function loadScript(url){
      var e = document.getElementsByTagName("script")[5];
      var d = document.createElement('script');
      d.src = url;
      d.type = 'text/javascript';
      d.async = false;
      d.defer = true;
      e.parentNode.insertBefore(d,e);
}

function addScriptDynamically(){
      var scheme = getCacheBurstScheme();
      if( scheme == 'dev'){
            scheme = new Date();
      }
      loadScript('js/global.js'+'?scheme='+scheme);
}

1 个答案:

答案 0 :(得分:3)

如果你正在使用jQuery,你可以利用他们的loadScript()功能。他们网站上的一个例子:

$.getScript("ajax/test.js", function(data, textStatus, jqxhr) {
    // [...]
});

关于您当前的解决方案,这里有几个提示:

  1. 您设置defer = true,这会将动态加载的脚本的加载(和执行)推迟到最后。因此util.js之后。我认为你不想那样
  2. 动态加载的js源不会出现在页面的源代码中。您可能需要使用Firebug之类的工具来验证是否已加载。