tl;dr: 与 PGB 文档中所说的相反,您必须在应用的根目录中保留 cordova.js 文件的副本,并且此文件必须取自 PhoneGap 的 2.0 版本,因为最新版本的 Ripple Emulator 不适用于其他版本或没有此文件。
解决方案
我正在使用 PhoneGap Build 开发我的 PhoneGap 应用程序,而不是本地 PhoneGap 环境。所以——按照我的指示——我已经从我的应用程序的 webroot 中删除了phonegap.js 文件,并且只在index.html 中留下了对它的引用。这对于 PhoneGap Build 来说没问题,但对于 Ripple Emulator 绝对不没问题。
自从我放回那个文件(实际上是来自lib\android\example\assets\www\ 的lib\android\example\assets\www\ 文件夹中的phonegap-2.0.0.zip 的cordova.js 之后,我设法查看了许可证,启动了Ripple Services 并在本地测试了PhoneGap 应用程序。
对于遇到类似问题的人的注意事项:当前版本的 Ripple Emulator 使用 Cordova 2.0。确保您下载了正确版本的PhoneGap并从中获取cordova.js!不要尝试使用较新版本的cordova.js(当前为3.0.0),因为您可能会遇到无法检测到的情况,包括看到许多奇怪的alert(),甚至挂断过载的Chrome。
始终确保您使用的是 PhoneGap 的 JS 文件版本,它与 Ripple 背后的版本相匹配。
一步一步
能够在 Windows 下使用 Chrome 和 Ripple Emulator 测试 PhoneGap 应用程序的关键步骤:
将cordova.js 文件放回文件夹根目录并检查对它的引用。您可以从任何可下载的 PhoneGap 版本的 lib\android\example\assets\www\ 文件夹中获取它(不过,您应该使用 phonegap-2.0.0.zip,见上文)。
使用 Chrome 商店为您的 Chrome 浏览器安装 Ripple Emulator 扩展程序。启用它。
-
启动您的本地网络服务器并通过它运行您的移动应用程序的 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,这样我们就可以放弃这些东西了。