Google 从两个不同的主机加载的闭包
Google Closure loaded from two separate hosts
我有一个站点 (www.myhost.com) 使用 Google 未编译的闭包(模块通过 deps.js 加载)。
我想从另一个主机导入另一个 Google 关闭应用程序。 (例如 www.otherhost.com)。
为了完成这个,我使用脚本标签从其他主机加载 deps 文件:
<script src="<http://www.otherhost.com/libraries/deps.js" type="text/javascript"></script>
deps.js 加载得很好。在该行之后,我有这个 goog.require 语句:
goog.require('MyObject');
对象未正确加载,因为 deps.js 中加载的依赖项是相对引用(例如 ../..)并且闭包尝试从 www.myhost.com
加载它们
有没有办法从两个不同的主机加载闭包对象?
这不是设计中考虑的场景。我认为加载的 deps 需要支持绝对 URL。但是,一种解决方案是使用普通脚本标签预加载依赖项。如果 "goog.require" 已经满足,则无需从 deps.js 文件解析位置。
这是解决问题的代码。基本上,Closure 使用全局变量 goog.basePath 来加载 deps。将其更改为其他服务器会导致从正确的位置加载 deps。由于在两个服务器之间正确使用了命名空间,我们的全局对象被正确创建并且没有发现重复项。
var savedBasedPath = goog.basePath;
goog.basePath = 'http://www.otherhost.com/libraries/closure/goog/';
goog.require('MyObject');
goog.basePath = savedBasedPath;
给 Google Closure 团队的建议是允许 goog.require 有一个可选参数,即 basePath,从而消除了对这个 hack 的需要。
我有一个站点 (www.myhost.com) 使用 Google 未编译的闭包(模块通过 deps.js 加载)。
我想从另一个主机导入另一个 Google 关闭应用程序。 (例如 www.otherhost.com)。
为了完成这个,我使用脚本标签从其他主机加载 deps 文件:
<script src="<http://www.otherhost.com/libraries/deps.js" type="text/javascript"></script>
deps.js 加载得很好。在该行之后,我有这个 goog.require 语句:
goog.require('MyObject');
对象未正确加载,因为 deps.js 中加载的依赖项是相对引用(例如 ../..)并且闭包尝试从 www.myhost.com
加载它们有没有办法从两个不同的主机加载闭包对象?
这不是设计中考虑的场景。我认为加载的 deps 需要支持绝对 URL。但是,一种解决方案是使用普通脚本标签预加载依赖项。如果 "goog.require" 已经满足,则无需从 deps.js 文件解析位置。
这是解决问题的代码。基本上,Closure 使用全局变量 goog.basePath 来加载 deps。将其更改为其他服务器会导致从正确的位置加载 deps。由于在两个服务器之间正确使用了命名空间,我们的全局对象被正确创建并且没有发现重复项。
var savedBasedPath = goog.basePath;
goog.basePath = 'http://www.otherhost.com/libraries/closure/goog/';
goog.require('MyObject');
goog.basePath = savedBasedPath;
给 Google Closure 团队的建议是允许 goog.require 有一个可选参数,即 basePath,从而消除了对这个 hack 的需要。