如何在 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 在本地永久存储数据文件?

Cordova - 如何访问设备存储?

CORDOVA :添加cordova-plugin-file-opener2插件cordova打包报错

所有 cordova.file 目录在 iOS 上都是空的