我想使用另一台主机中存在的javascript文件。 该文件包含一个闭包
//http://ExternalHost.com/somefile.js
(function(){
//...........
//...........
return { x:1, y:2 };
})();
我想使用闭包的返回对象。
我的问题是
1)我怎样才能获得该文件?
2)如何使用闭包的返回值?
我知道如果文件喜欢
,我们可以使用返回的值//http://ExternalHost.com/somefile.js
window.returnedObject = (function(){
//...........
//...........
return { x:1, y:2 };
})();
但问题是:window.returnedObject是全局的!
答案 0 :(得分:1)
好吧,让我们来分析吧。
somefile.js
位于其他域中。因此,您应该从yourdomain.tld
申请,并在externalhost.com
。你有很多选择:
通过简单的HTTP Get方法请求它,该方法是通过在DOM上的任意位置放置<script />
标记来发出的。通过这种方式,浏览器获取文件,在到达时执行它,并且您必须挂钩到此过程,除非您和外部主机都同意某些类似的协议,如JSONP,这当然是数据,而不是库。所以,这个选项没用。
使用XMLHttpRequest同步或异步加载文件。但是XMLHttpRequest是在same-origin policy的严格控制下设计的。因此,外部主机应该允许您通过某些HTTP标头使用它,例如Access-Control-Allow-Origin
。这当然也适用于正常的要求。但是,当您使用XMLHttpRequest时,您有机会挂钩内容的负载,并在其上执行某些操作。但是,在这种情况下,浏览器会编译JavaScript并在将其提供给XMLHttpRequest(您的ajax调用)之前运行它。所以,再没有用。
了解JavaScript中闭包的真正含义和哲学。它就像面向对象编程中的private
访问修饰符。从技术上讲,它不允许你访问它:D。这个选项有效。但它只会增加你的知识,不会期望使用那种封闭。
所以,我认为你不能AMAIK。