使用外部站点中存在的javascript闭包

时间:2013-10-23 12:11:38

标签: javascript web

我想使用另一台主机中存在的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是全局的!

1 个答案:

答案 0 :(得分:1)

好吧,让我们来分析吧。

somefile.js位于其他域中。因此,您应该从yourdomain.tld申请,并在externalhost.com。你有很多选择:

  1. 通过简单的HTTP Get方法请求它,该方法是通过在DOM上的任意位置放置<script />标记来发出的。通过这种方式,浏览器获取文件,在到达时执行它,并且您必须挂钩到此过程,除非您和外部主机都同意某些类似的协议,如JSONP,这当然是数据,而不是库。所以,这个选项没用。

  2. 使用XMLHttpRequest同步或异步加载文件。但是XMLHttpRequest是在same-origin policy的严格控制下设计的。因此,外部主机应该允许您通过某些HTTP标头使用它,例如Access-Control-Allow-Origin。这当然也适用于正常的要求。但是,当您使用XMLHttpRequest时,您有机会挂钩内容的负载,并在其上执行某些操作。但是,在这种情况下,浏览器会编译JavaScript并在将其提供给XMLHttpRequest(您的ajax调用)之前运行它。所以,再没有用。

  3. 了解JavaScript中闭包的真正含义和哲学。它就像面向对象编程中的private访问修饰符。从技术上讲,它不允许你访问它:D。这个选项有效。但它只会增加你的知识,不会期望使用那种封闭。

  4. 所以,我认为你不能AMAIK。