【问题标题】:Import JavaScript file in JavaScript function [duplicate]在 JavaScript 函数中导入 JavaScript 文件 [重复]
【发布时间】:2011-08-19 06:14:32
【问题描述】:

可能的重复: Include a JavaScript file in a JavaScript file How to include a JavaScript file in another JavaScript file?

在 JavaScript function() 中导入 JavaScript 文件(例如 file.js)的最佳方法是什么?

例如,替换 todo 语句的最佳方法是什么:

function doSomething() {
   if (xy.doSomething == undefined) {
      // TODO: load 'oldVersionPatch.js'
   }
   ...
}

可能最好的解决方案是创建脚本元素并将其添加到 HTML 页面中。

  • 将其添加/附加到头部或正文中更好吗(何时加载)?
  • 使用 JavaScript 还是 jQuery 更好(哪个更兼容跨浏览器)?

【问题讨论】:

  • 是的,但是已经有很多答案了。我不确定是否最好将脚本添加到头部,正文(何时加载),使用 jquery 或标准 javascript(更兼容跨浏览器)

标签: javascript


【解决方案1】:

非常简单,在JavaScript 中创建一个<script> 元素,将src 属性附加到URL 是什么并附加到DOM。应该这样做。

【讨论】:

    【解决方案2】:
      var filename = 'oldVersionPatch.js';
      var js = document.createElement('script');
      js.setAttribute("type","text/javascript");
      js.setAttribute("src", filename);
      document.getElementsByTagName("head")[0].appendChild(js);
    

    ..应该这样做

    【讨论】:

      【解决方案3】:

      你必须让你的代码异步来获得这个:

      var script = document.createElement('script');
      script.type = 'text/javascript';
      script.src = yourJavascriptFileLocation;
      script.onload = script.onreadystatechange = function() {
          if (!script.readyState || script.readyState === 'complete') {
              /* Your code rely on this JavaScript code */
          }
      };
      var head = document.getElementsByTagName('head')[0];
      // Don't use appendChild
      head.insertBefore(script, head.firstChild);
      

      【讨论】:

      • 为什么我不能使用 appendChild?
      • 如果<head> 部分中的<base> 元素是<head> 的最后一个子元素,则在IE6 中appendChild 将导致错误行为,即附加整个DOM到<base> 元素:)
      【解决方案4】:

      http://api.jquery.com/jQuery.getScript/

      (function(){
        this.__defineGetter__("__FILE__", function() {
          return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":");
        });
      })();
      
      (function(){
        this.__defineGetter__("__DIR__", function() {
          return __FILE__.substring(0, __FILE__.lastIndexOf('/'));
        });
      })();
      
      function include(file,charset) {
          if (document.createElement && document.getElementsByTagName) {
              var head = document.getElementsByTagName('head')[0];
              var script = document.createElement('script');
              script.setAttribute('type', 'text/javascript');
              script.setAttribute('src', __DIR__ + '/' + file);
              if(charset){
                  script.setAttribute('charset', charset);
              }
              head.appendChild(script);
          }
      }
      

      【讨论】:

      • 好的,我使用了 jquery 样式: $.getScript('xyz.js', function() {});谢谢。
      猜你喜欢
      • 2017-08-26
      • 2023-02-02
      • 2021-03-28
      • 2021-02-23
      • 2019-03-06
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2019-01-20
      相关资源
      最近更新 更多