我正在使用以下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之类的错误是未定义的。有没有办法使这项工作,或谷歌不支持dojox扩展?
或者,我可以使用另一个常用主机来进行标准的dojo发布吗?
答案 0 :(得分:4)
与直接从&lt; script&gt;引用.js文件时不同标签(请注意,谷歌js api也支持此功能,请参阅here),google.load不是同步的。这意味着当您的代码到达google.load时,它不会等待dojo完全加载以保持解析;它将直接进入你的dojo.require行,它将在那里失败,因为 dojo 对象将是未定义的。
解决方案(如果您不想使用直接&lt; script&gt;标记),是将所有引用dojo的代码包含在 start 函数中,并将其设置为通过执行回调:
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");
...
}
答案 1 :(得分:0)
我相信google会成为导入库的命名空间。尝试:google.dojo.require
。
哦!如下所述,请不要忘记使用google.setOnLoadCallback而不是直接调用您的函数。
答案 2 :(得分:0)
更好的问题是 - 你为什么要这样做?如果您在本地主机上进行开发,那么只需使用相对路径,如果您正在面向互联网的服务器上进行开发 - 将dojo文件粘贴在其上。
另外 - 确保你没有违反same origin policy
答案 3 :(得分:0)
恕我直言,dojo应该是自托管的,因为总会有你需要覆盖的东西 - 例如,你需要在dojox.gfx中修改一些东西。