题
我使用以下 html 从 Google 托管加载 dojo。
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("dojo", "1.1.1");</script>
<script type="text/javascript">
dojo.require("dojox.gfx");
...
此错误出现在 requre 行上,并出现类似 dojox.gfx is undefined 的错误。有没有办法让它工作,或者谷歌不支持dojox扩展?
或者,是否有另一个通用主机可以用于标准 dojo 版本?
解决方案
与直接从 <script> 标记引用 .js 文件不同(请注意,google js api 也支持此功能,请参阅 这里),google.load 不同步。这意味着当你的代码到达google.load时,它不会等待dojo完全加载来继续解析;它将直接进入你的 dojo.require 行,并且它会在那里失败,因为 道场 对象将是未定义的。
解决方案(如果您不想使用直接 <script> 标记),是将引用 dojo 的所有代码包含在 开始 函数,并将其设置为回调,方法是:
google.load("dojo", "1.1.1", {callback: start});
function start() {
dojo.require("dojox.gfx");
...
}
或者
google.setOnLoadCallback(start);
google.load("dojo", "1.1.1");
function start() {
dojo.require("dojox.gfx");
...
}
其他提示
更好的问题是——你为什么想要这样做?如果您在本地主机上进行开发,则只需使用相对路径,如果您在面向互联网的服务器上进行开发,则将 dojo 文件粘贴到该路径上。
另外 - 确保你没有犯规 同源政策
我相信 google 成为您导入的库的命名空间。尝试: google.dojo.require
.
哦!如下所述,不要忘记使用 google.setOnLoadCallback 而不是直接调用您的函数。
dojox 实际上已不再维护,将从 dojo-2 中删除。dojox 中的大多数小部件都存在重大问题,只有少数是好的。
恕我直言,dojo 应该是自托管的,因为总有一些东西您需要覆盖 - 例如,您需要在此 dojox.gfx 中进行一些修复。
不隶属于 StackOverflow