tl;dr: 与PGB文档中说的相反,你必须在应用程序的根目录中保留cordova.js
文件副本,并且此文件必须来自PhoneGap的确切版本2.0,因为最新版本的Ripple模拟器既不与其他版本一起使用也不使用没有此文件。
解决方案
我正在使用PhoneGap Build开发我的PhoneGap应用程序,而不是本地的PhoneGap环境。所以--正如我所指示的那样--我已经从我的应用程序的webroot中删除了phonegap.js
文件,只留下了对它的引用index.html
中。这对于PhoneGap Build来说很好,但对于Ripple模拟器绝对不好。
自从我将那个文件放回去(实际上是从phonegap-2.0.0.zip
的lib\android\example\assets\www\
文件夹中的cordova.js
),我就能够看到许可证,启动Ripple服务并在本地测试工作的PhoneGap应用程序。
针对遇到类似问题的人的注意事项:当前版本的Ripple Emulator使用Cordova 2.0
。确保您下载正确的PhoneGap版本并从中获取cordova.js
!不要尝试使用来自新版本(目前为3.0.0
)的cordova.js
,因为您可能会遇到无法检测到的情况,包括看到许多奇怪的alert()
和甚至挂起超载的Chrome。
始终确保您正在使用与Ripple后面的电话间隔符匹配的PhoneGap JS文件版本。
步骤
在Windows下使用Chrome和Ripple模拟器测试PhoneGap应用程序的关键步骤:
将cordova.js
文件放回文件夹根目录,并检查引用。您可以从任何可下载的PhoneGap版本(建议使用phonegap-2.0.0.zip
,请参见上文)中的lib\android\example\assets\www\
文件夹中获取它。
在Chrome商店中安装Ripple Emulator
扩展程序。启用它。
启动本地Web服务器,并通过它运行您的移动应用程序的HTML代码(通过直接文件访问进行测试主要在Ripple模拟器中可行,但不建议这样做,可能会产生不可预测的结果)。
单击Ripple模拟器图标,在Chrome omnibar右侧,然后单击Enable
(或从上下文菜单中选择适当选项,右键单击页面)。
接受许可协议并选择正确的平台(Cordova 2.0.0
)。
再次单击Ripple模拟器图标,如果未自动启动,则单击Start Ripple Services
。
设置目标平台(设备),并在本地享受工作的PhoneGap应用程序。
版本和API差异
您还需要注意PhoneGap API的变化,并仔细检查在PhoneGap 2.0.0中可用的内容及其访问方式。例如,简单的连接类型检查自那以后已经改变。在2.9.0 API中,它是通过navigator.connection
完成的,而在2.0.0 API中,则是通过navigator.network
界面进行访问。
由于Ripple模拟器使用的是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版本,这样我们就可以放弃这些东西。