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

如何动态加载来自不同域的javascript文件?

如何解决《如何动态加载来自不同域的javascript文件?》经验,为你挑选了1个好方法。

我发现这个优秀的代码,由aemkei发布,作为这些问题的答案:

    你如何动态加载JavaScript文件?(想想C的#include)

    使用javascript根据需要注入脚本引用?

您可以编写动态脚本标记(使用Prototype):

new Element("script", {src: "myBigCodeLibrary.js", type: "text/javascript"});

这里的问题是我们不知道外部脚本文件何时完全加载.

我们经常希望我们的依赖代码在下一行,并喜欢写下这样的东西:

if (iNeedSomeMore){
  Script.load("myBigCodeLibrary.js");  // includes code for myFancyMethod();
  myFancyMethod();                     // cool, no need for callbacks!
}

有一种智能方法可以在不需要回调的情况下注入脚本依赖项.您只需通过同步AJAX请求拉出脚本并在全局级别上评估脚本.

如果使用Prototype,则Script.load方法如下所示:

var Script = {
  _loadedScripts: [],
  include: function(script){
    // include script only once
    if (this._loadedScripts.include(script)){
      return false;
    }
    // request file synchronous
    var code = new Ajax.Request(script, {
      asynchronous: false, method: "GET",
      evalJS: false, evalJSON: false
    }).transport.responseText;
    // eval code on global level
    if (Prototype.Browser.IE) {
      window.execScript(code);
    } else if (Prototype.Browser.WebKit){
      $$("head").first().insert(Object.extend(
        new Element("script", {type: "text/javascript"}), {text: code}
      ));
    } else {
      window.eval(code);
    }
    // remember included script
    this._loadedScripts.push(script);
  }
};

我发现,如果所有这些代码都在'file://'协议中执行,那么代码在IE上不起作用,但是,它不是问题,因为它的用例涉及真正的Web应用程序.

我试过一次,包括http://www.google-analytics.com/urchin.js谷歌的,但是从一个网页,但看起来它不能从不同的域请求javascript文件.

我们如何动态添加javascript,就像上面的脚本一样,但是来自另一个域?



1> Luca Matteis..:

您可以使用onloadand onreadystatechange事件来了解

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