tl;dr:与 PGB 文档中所说的相反,您必须在应用程序的根目录中保留一份cordova.js
文件副本,并且该文件必须取自 PhoneGap 的 2.0 版,因为最新版本的 Ripple Emulator 不适用于两者其他版本也没有这个文件。
解决方案
我正在使用 PhoneGap Build 开发我的 PhoneGap 应用程序,而不是本地 PhoneGap 环境。所以——按照我的指示——我已经phonegap.js
从我的应用程序的 webroot 中删除了文件,并且只在index.html
. 这对于 PhoneGap Build 来说很好,但对于 Ripple Emulator绝对不行。
自从我把那个文件放回去(实际上是cordova.js
从我设法查看许可证的lib\android\example\assets\www\
文件夹中)开始,启动 Ripple 服务并在本地测试工作的 PhoneGap 应用程序。phonegap-2.0.0.zip
遇到类似问题的人的注意事项:当前版本的 Ripple Emulator 使用Cordova 2.0
. 确保您下载了正确版本的 PhoneGap 并从中cordova.js
获取!不要尝试cordova.js
从较新的版本(当前3.0.0
)使用,因为您可能会遇到无法检测到的情况,包括看到许多奇怪alert()
的 's 甚至挂断重载的 Chrome。
始终确保您使用的是 PhoneGap 的 JS 文件版本,它与 Ripple 背后的版本相匹配。
一步步
使用 Chrome 和 Ripple Emulator 在 Windows 下测试 PhoneGap 应用程序的关键步骤:
将cordova.js
文件放回文件夹根目录并检查对它的引用。lib\android\example\assets\www\
您可以从任何可下载版本的 PhoneGap的文件夹中获取它(您应该使用phonegap-2.0.0.zip
,见上文)。
Ripple Emulator
使用 Chrome 商店为您的 Chrome 浏览器安装扩展程序。启用它。
启动您的本地网络服务器并通过它运行您的移动应用程序的 HTML 代码(在 Ripple Emulator 中主要可以通过直接文件访问进行测试,但非常不建议这样做,并且可能会产生不可预测的结果)。
单击 Chrome 多功能栏右侧的 Ripple Emulator 图标,然后单击Enable
(或从上下文菜单中选择适当的选项,右键单击页面)。
接受许可协议并选择合适的平台 ( Cordova 2.0.0
)。
再次单击 Ripple Emulator 图标,Start Ripple Services
如果它们没有自动启动,请单击。
设置目标平台(设备)并在本地享受工作的PhoneGap应用程序。
版本和 API 差异
您还必须密切关注PhoneGap API并仔细检查PhoneGap 2.0.0 中可用的内容以及如何访问它?例如,从那时起,简单的连接类型检查就发生了变化。在2.9.0 API中,它是通过 完成的navigator.connection
,而在2.0.0 API中,它是在navigator.network
接口下访问的。
由于 Ripple Emulator 使用 PhoneGap 2.0.0,目前支持的调用此对象的方式:
var networkState = navigator.connection.type;
将失败。您必须以这种方式使用它:
var networkState = navigator.network.connection.type;
虽然您可以选择 PhoneGap 版本,但在 PhoneGap Build 中编译时(您可以强制它使用 2.0.0 版本,尽管以不变的方式编译此代码),您很可能希望使用最新版本的 PhoneGap 开发您的应用程序。
在这种情况下,您必须使用一种“安全”的方法,该方法适用于 Ripple 和 PhoneGap:
var networkState = ((navigator.connection) ? navigator.connection.type : ((navigator.network && navigator.network.connection) ? navigator.network.connection.type : 'unknown'));
或者你可以声明一些特殊的变量:
var debugMode = typeof(window.tinyHippos) !== 'undefined';
并将其用作开关:
var networkState = (debugMode) ? navigator.network.connection.type : navigator.connection.type;
希望 Ripple 很快会更新到最新的 PhoneGap,这样我们就可以放弃这些东西。