4

我使用 dojo 框架开发了一个 Web 应用程序。此应用程序必须由浏览器使用 file:/// 协议加载(它将成为适用于 Android/iPad 的 Cordova/Phonegap 应用程序)。index.html 文件如下所示:

头部

<script type="text/javascript">
    var dojoConfig =  {
        parseOnLoad: true
    }
</script>

<script type="text/javascript" src=""dojo.js"/>

<script type="text/javascript">
  dojo.require("dojox.mobile.parser");
  dojo.require("dojox.mobile");
</script>

正文部分:

<script type="text/javascript">
    dojo.require("dojox.mobile.parser");
    dojo.require("dojox.mobile");
</script>

它取自 IBM 课程(移动应用程序开发,第 1 部分:Android 上的 PhoneGap 和 Dojo Mobile

所以有两个问题:

1) dojo 尝试加载模块但未能使用 file:/// 协议加载。需要 HTTP 协议。

2) 在 index.html 中,我使用了由 web builder 制作的定制版 dojo。此构建包含一个包含我需要的模块的文件。然而,这些模块必须是必需的,这使得框架尝试从不存在的文件中加载它们,尽管它们已经加载到大型自定义 dojo.js 中

可能有人知道如何解决这两个问题。

4

2 回答 2

0

您根本不能通过文件协议使用 dojo,因为 AMD 引擎会通过 XHR 请求延迟加载依赖项,这不会以这种方式工作。

参考:http ://www.sitepen.com/blog/2014/07/30/dojo-faq-why-do-i-need-to-use-an-http-server-with-dojo/

考虑简单地使用节点 js 网络服务器进行开发,并在手机应用程序中嵌入一个小型网络服务。

您仍然可以尝试通过过时但仍然可用的接口 dojo.someModule 访问模块,因为由于兼容性问题,模块是在全局命名空间中定义的。但是我不确定这是否运作良好。

您还可以尝试在 dojo 配置中将 async 设置为 false。

于 2015-02-03T10:35:31.540 回答
0

你在哪个浏览器上测试你的代码?出于安全考虑,Chrome 不允许在一个 Html 文件中包含多个域。在 Firefox 浏览器上尝试您的代码,它应该会提示警告并运行代码。还要确保 index.html 文件位于 dojo 源(dojo 库)的父目录中。IE

您的目录结构应如下所示
|--[dojo_source/dojo_library]
|
|-index.html。

还可以在浏览器 file:// 中使用文件协议运行您的代码

希望这可以帮助。

另一种选择是安装 Web 服务器。您可以试试“mongoose”网络服务器,它非常轻巧,只有 136KB 大小。然后您可以设置它来运行您的 dojo 代码。我一直在使用 Web 服务器,它非常适合对我的代码进行单元测试。

于 2014-05-28T12:31:08.763 回答