4

我有一个 phongap 应用程序,它带有一个在 android 和 iphone 中运行的 sqlite 插件。当我尝试在 Ripple 中运行它时,我会遇到几个错误,具体取决于我使用的 cordova 版本和设备。他们都没有工作。在stackoverflow 的一些评论中,我看到人们在ripple 下的phonegap 中运行sqlite。

我在我的项目中使用 PG-SQLitePlugin-Android插件,它实际上只支持 Phonegap 2.7.0+。

我发现我可以通过调用 Ripple 来强制使用 2.7.0:

file://localhost/Users/----/----/----/www/index.html?enableripple=cordova-2.7.0

在启用通过 chrome 访问文件系统后,Ripple 实际上加载得很好。

当我在脚本中包含 cordova-2.7.0.js

index.html 弹出一个弹出窗口,其中包含以下文本:

差距:[“设备”,“getDeviceInfo”,“设备119187522”]

我可以接受或取消,然后再出现 2 个对话框,如果我接受它会被挂起。

js 控制台显示 cordova 2.7.0 确实在运行:

由于缺少 _cordovaNative,因此退回到 PROMPT 模式。仅适用于 Android 3.2 及更低版本。科尔多瓦-2.7.0.js:906

deviceready 未触发

当我在我的脚本中包含 cordova-2.9.0.js

它的发生与 2.7 相同

由于缺少 _cordovaNative,因此退回到 PROMPT 模式。仅适用于 Android 3.2 及更低版本。科尔多瓦-2.7.0.js:906

但这次我得到了其他错误

加载资源文件失败://localhost/Users/laullobetpayas/-------/---/------/www/cordova/cordova_plugins.json 加载资源文件失败://localhost/用户/-------/---/-----/www/cordova/cordova_plugins.js

deviceready 未触发

当我的脚本中不包含任何 cordova.js

SQLitePlugin.js:31 Uncaught ReferenceError: cordova 未定义 SQLitePlugin.js:34

  • 我使用了正确的插件吗?
  • 哪个是使用插件和波纹运行的cordova / device tu的propper版本?
  • 我是否必须在我的项目中包含cordova.js

Hel 将非常感激,我试图解决这个问题已经有很长一段时间了。提前谢谢你。

4

3 回答 3

6

Phonegap 插件不能与 Ripple 一起使用,因为 Phonegap 插件的想法是它提供了一个 Javascript 接口来执行本机代码。这意味着,在 Android 的情况下,Javascript 将调用本机 Java 代码,而在 iOS 的情况下,Javascript 将调用本机的 Objective-C。

Ripple 纯粹基于 Javascript,因此插件的 Javascript 部分没有任何接口。

例如,在 SQLitePlugin 的情况下,调用SQLitePlugin.close()会导致调用:

cordova.exec(null, null, "SQLitePlugin", "close", [this.dbname]);

其中SQLitePlugin是原生类名,close是原生函数名。

如果你想在 Android、iOSRipple 上使用相同的存储 API,可以考虑使用带有适当适配器的草坪椅。

至于 Ripple 和 Phonegap 2.7.0/2.9.0 的问题,Ripple 还没有完全赶上 Phonegap,所以你会在控制台中看到这些弹出窗口和错误消息,但这不会停止你的 Phonegap 应用程序(没有原生插件) 在 Ripple 中运行。您可以通过一个简单的测试用例来说服自己,例如:

document.addEventListener("deviceready", function(){
  alert("I'm alive");
});

但答案是,是的,您确实需要包含 cordova.js 才能让它在 Ripple 中完全工作。

于 2013-08-14T20:00:12.390 回答
2

Cordova-SQLitePlugin是 HTML5 SQL API的直接替代品,因此当在 Ripple 中运行时,您无需调用 Cordova 层,只需将 sqlitePlugin.openDatabase() 的调用替换为 window.openDatabase()。我还没有用 Ripple 测试过这个,但它应该可以工作。有一些数据库大小限制,但这可能是您测试所需的全部。

几种方法可以测试您是否在 Cordova 内部。您可以根据在应用启动时对 Cordova 的测试为 openDatabase() 方法创建一个 shim。

于 2014-06-22T23:40:39.440 回答
0

由于您的主要目标实际上是使用 Cordova 对 SQLite 进行快速测试(而不是专门使用 Ripple),我想建议使用 Ripple 的另一种新替代方案。

我编写了一个名为Sencha Touch Live的应用程序,它可以用于快速开发 Cordova / HTML5 应用程序,它允许您通过更新开发计算机上的文件来实时编辑和调试移动设备上的 HTML/JS/CSS 代码 - 所以您可以跳过大多数重新编译/重新部署/重新启动调试器的时间成本。它还有许多其他很酷的功能。我自己使用它进行 SQLite 应用程序测试,而不是 Ripple 或 Weinre

它基于 Adob​​e 的 PhoneGap Developer App 的代码,因此核心代码经过了很好的测试。尽管它也适用于 jQuery Mobile 或任何将 HTML5 代码置于phonegap/wwworcordova/www文件夹下的框架,但它已针对 Sench Touch 框架进行了广泛的调整和调整。只需在 PhoneGap 或 Cordova 项目文件夹中启动服务器。

为了测试您的 SQL 和控制器逻辑,我建议使用带有 Android 4.4.x KitKat 版本的Geny Motion模拟器。在您的桌面上启动最新版本的 Chrome,一旦您的应用程序在模拟器或真实设备上运行chrome://inspect,您就可以在远程设备应用程序上使用完整的 Chrome 调试器。您还可以使用最新版本的 Safari 进行 OSX/iPhone 模拟器测试。

您可以在此处观看演示(从 5 分钟开始)。是的!它需要一个更精致、回声更少的视频,但你会明白的:

于 2014-09-12T01:56:34.883 回答