如何在 file:/// 协议 (Cordova/Phonegap) 下使用来自 dojo 的自定义构建
Posted
技术标签:
【中文标题】如何在 file:/// 协议 (Cordova/Phonegap) 下使用来自 dojo 的自定义构建【英文标题】:How to use custom build from dojo under file:/// protocol (Cordova/Phonegap) 【发布时间】:2014-07-14 10:55:42 【问题描述】:我使用 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 课程 (Mobile application development, Part 1: PhoneGap and Dojo Mobile on Android)
所以有两个问题:
1) dojo 尝试加载模块但未能使用 file:/// 协议加载。需要 HTTP 协议。
2) 在 index.html 中,我使用了由 web builder 制作的自定义构建的 dojo。此构建包含一个包含我需要的模块的文件。然而,这些模块必须是必需的,这使得框架尝试从不存在的文件中加载它们,尽管它们已经加载到大型自定义 dojo.js 中
可能有人知道如何解决这两个问题。
【问题讨论】:
【参考方案1】:您在哪个浏览器上测试您的代码? 出于安全考虑,Chrome 不允许在一个 Html 文件中包含多个域。 在 Firefox 浏览器上尝试您的代码,它应该会提示警告并运行代码。 还要确保 index.html 文件位于 dojo 源(dojo 库)的父目录中。即
您的目录结构应如下所示 |--[dojo_source/dojo_library] | |-index.html.
还可以在浏览器中使用文件协议运行您的代码 文件://
希望这会有所帮助。
另一种选择是安装 Web 服务器。您可以试试“mongoose”网络服务器,它非常轻巧,只有 136KB 大小。然后您可以设置它来运行您的 dojo 代码。我一直在使用 Web 服务器,它非常适合对我的代码进行单元测试。
【讨论】:
【参考方案2】:您根本无法通过文件协议使用 dojo,因为 AMD 引擎会通过 XHR 请求延迟加载依赖项,这不会以这种方式工作。
参考:http://www.sitepen.com/blog/2014/07/30/dojo-faq-why-do-i-need-to-use-an-http-server-with-dojo/
考虑简单地使用 node js 网络服务器进行开发,并在手机应用程序中嵌入一个小型网络服务。
由于兼容性问题,您仍然可以尝试通过过时但仍然可用的接口 dojo.someModule 访问模块,因为模块是在全局命名空间中定义的。但是我不确定这是否运作良好。
您也可以尝试在 dojo 配置中将 async 设置为 false。
【讨论】:
以上是关于如何在 file:/// 协议 (Cordova/Phonegap) 下使用来自 dojo 的自定义构建的主要内容,如果未能解决你的问题,请参考以下文章
使用 Cordova 3.7 (file://) 从 iOS 8 上的 www 文件夹加载资产
如何通过android应用程序(使用phonegap/cordova创建)在对服务器进行休息调用时删除原点:file://?
如何仅使用 iOS 5+ 和 Cordova 3.5 在本地永久存储数据文件?