1

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

4

1 回答 1

1

好吧,我们来分析一下。

somefile.js驻留在另一个域中。因此,您应该向它提出请求,yourdomain.tld并且它在externalhost.com. 你有很多选择:

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

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

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

所以,我认为你不能 AMAIK。

于 2013-10-23T12:20:09.323 回答