【发布时间】:2009-02-27 03:36:55
【问题描述】:
我发现这个由aemkei 发布的优秀代码作为这些问题的答案:
- How do you dynamically load a javascript file? (Think C’s #include)
- Use javascript to inject script references as needed?
您可以编写动态脚本标签 (使用原型):
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,就像上面的脚本一样,但是来自另一个域?
【问题讨论】:
标签: javascript