我正在基于here的原始文档在我的Ionic应用程序中创建数据库测试,但是当我创建并运行应用程序时,在终端上出现以下错误:
**Uncaught TypeError: Cannot read property 'openDatabase' of undefined**
请帮我解决这个问题。
我安装了ng-cordova插件并在index.html中添加了ng-cordova.min.js。
答案 0 :(得分:0)
由于您在浏览器中运行,因此无法使用cordova.js和预期的设备功能。
这些通常是通过'mocks'来解决的,这些代码存在超出某些功能的代码。 ngCordova提供了一些。要使用它们,请将ngCordova.mocks.js文件添加到您的karma.conf。
也就是说,模拟不能保证完全测试所有ngCordova功能,您可能需要模拟。 From the docs
仅在手机上开发
在您的浏览器中进行开发时,Cordova插件无法正常工作,因为 每个插件访问一个特定的API(如相机,麦克风, 加速度计),在您的浏览器中不可用。另外, 某些插件在模拟器中不起作用,例如Camera插件 需要在物理设备上进行开发。
答案 1 :(得分:0)
某些插件无法在浏览器和模拟器上运行。您需要使用真实设备测试您的应用。特别是在处理数据库时。由于插件不起作用,您尝试从插件访问的所有内容都将是未定义的。
答案 2 :(得分:0)
在我的情况下,我通过移除cordova-sqlite-plugin
插件并添加cordova-sqlite-storage
解决了问题。
然后我输入离子状态重置以重新安装我在package.json
上定义的插件它运作良好
=>这是移动设备的情况,对于浏览器,有必要使用:
$window.openDatabase("databasename" , '', 'database', 2000000)
答案 3 :(得分:0)
您可以查看此tutorial:
当您看到此错误时:
TypeError:无法读取未定义的属性“openDatabase”
这是因为以下几个原因之一:
您没有将...
constructor(@Optional() private activeModal: NgbActiveModal){
...
}
...
finish(){
if(this.activeModal){
this.activeModal.dismiss(data);
}else{
//regular component finish code
}
}
方法包装在$cordovaSQLite
函数中。
您正尝试从Web浏览器测试此本机插件。
您实际上没有将基础SQLite插件安装到项目中。
导致此错误的最常见原因是#1和#2。只有在确认应用程序准备好后才能使用本机插件,因此$ionicPlatform.ready()
方法。由于本机插件使用本机代码,因此无法通过Web浏览器对其进行测试。
阅读我链接的教程,因为它可以帮助您。