我有一个带有 sqlite 插件的 phongap 应用程序,它可以在 android 和 iphone 上运行。当我尝试在 Ripple 中运行它时,我会收到几个错误,具体取决于我使用的 cordova 版本和设备的包含情况。他们中没有一个在工作。在 stackoverflow 的一些评论中,我看到有人在 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 弹出一个弹出窗口,其中包含以下文本:
gap:["Device","getDeviceInfo","Device119187522"]
我可以接受或取消,然后再出现 2 个对话框,如果我接受它就会被挂起。
js控制台显示cordova 2.7.0确实在运行:
Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only. cordova-2.7.0.js:906
deviceready 没有触发
当我在脚本中包含 cordova-2.9.0.js 时
它恰好与 2.7 相同
Falling back on PROMPT mode since _cordovaNative is missing. Expected for Android 3.2 and lower only. cordova-2.7.0.js:906
但是这次我得到了其他错误
Failed to load resource file://localhost/Users/laullobetpayas/-------/---/------/www/cordova/cordova_plugins.json Failed to load resource file://localhost/Users/-------/---/------/www/cordova/cordova_plugins.js
deviceready 没有触发
当我不在脚本中包含任何 cordova.js 时
SQLitePlugin.js:31 Uncaught ReferenceError: cordova is not defined SQLitePlugin.js:34
- 我使用的插件是否正确?
- 使用插件和 ripple 运行的 cordova/设备的正确版本是什么?
- 我是否必须在我的项目中包含 cordova.js
Hel 将不胜感激,很长一段时间以来,我一直在努力解决这个问题。 先谢谢你。
最佳答案
Phonegap 插件不适用于 Ripple,因为 Phonegap 插件的理念是它提供 Javascript 接口(interface)以执行 native 代码。这意味着,在 Android 的情况下,Javascript 将调用 native Java 代码,而在 iOS 的情况下,Javascript 将调用 native Objective-C。
Ripple 完全基于 Javascript,因此插件的 Javascript 部分没有任何接口(interface)。
例如,对于 SQLitePlugin,调用 SQLitePlugin.close()
会导致调用:
cordova.exec(null, null, "SQLitePlugin", "close", [this.dbname]);
其中 SQLitePlugin
是原生类名,close
是原生函数名。
如果您想在 Android、iOS 和 Ripple 中使用相同的存储 API,可以考虑使用 lawnchair使用适当的适配器。
至于 Ripple 和 Phonegap 2.7.0/2.9.0 的问题,Ripple 还没有完全 catch Phonegap,所以您会在控制台中看到这些弹出窗口和错误消息,但这不会停止您的 Phonegap 应用程序(没有 native 插件)在 Ripple 中运行。您可以通过一个简单的测试用例让自己相信这一点,例如:
document.addEventListener("deviceready", function(){
alert("I'm alive");
});
但答案是,是的,您确实需要包含 cordova.js 才能使其在 Ripple 中正常工作。
关于sqlite - 如何在 Ripple 中使用 Sqlite 运行 PhoneGap 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236348/