Ionic 2错误:Cordova不可用。

34

我正在尝试在一个新的ionic 2项目中(最新的ionic2版本)使用cordova GooglePlus插件,但总是遇到关于cordova的错误。 该插件已正确安装并显示在插件文件夹中。

我尝试的一个方法是:

import { GooglePlus } from "ionic-native";

然后

GooglePlus.login().then(...)

登录方法执行,但总是抛出一个错误,提示"cordova_not_available"

我想先在我的Windows系统上使用ionic serve测试应用程序,然后再将其部署到我的Android手机上。 如何使Cordova在本地主机服务器中可用?通过搜索,我了解到cordova.js是生成的,并始终包含在设备的部署包中。

我尝试的另一种方法是使用

window.plugins.googleplus.login(...)

但是这种方法无法通过 TypeScript 编译器,因为它不知道 windows 对象上的 plugins 属性。

我该如何解决?

5个回答

68

如果您希望插件在浏览器中运行,您应该添加platform browser并运行它:

ionic cordova platform add browser

然后运行它:

ionic cordova run browser

使用ionic serve命令的替代方法。


@JasonKrs请确保已添加浏览器平台,我的意思是检查一下是否在平台文件夹下创建了一个浏览器文件夹?或者尝试将其删除并重新添加。 - Ajay Gupta
是的,它没有被添加...在尝试你说的之前,我评论了答案...我的错... - Jason Krs
1
如果有人遇到问题,请在执行第一个命令后确保运行“npm install”,然后再运行浏览器。 - Deepak Yadav
@AjayGupta - 是否可以在浏览器中使用--livereload? - Mohan

15
当您使用ionic serve在Chrome中运行应用程序时,通常会出现此错误。这是正常的,因为在浏览器中,cordova本机组件不存在,但即使您已经为其添加了ionic插件,当您使用的Ionic本机插件未添加时,它也会出现在模拟器和设备上。
例如,如果您正在使用本地Toast ,则需要添加适当的ionic依赖项:
ionic plugin add cordova-plugin-x-toast --save

但您还需要添加Cordova依赖项:

cordova plugin add cordova-plugin-x-toast --save

如果您忘记添加后来的Cordova插件,您将会收到像这样的错误:

Runtime Error Uncaught(in promise): cordova_not_available

找到原因可能会很棘手。

一旦您添加了Ionic和Cordova依赖项,您应该能够使用它。

请确保导入它:

import { Toast } from 'ionic-native';

在构造函数中注入平台:

constructor(public navCtrl: NavController, private platform: Platform) {...

然后使用本机项目:

this.platform.ready().then(() =>
      Toast.show("Successfull", '5000', 'center')
        .subscribe(
        toast => {
          console.log(toast);
        }
      ));

我注意到在Linux上运行Android模拟器时,有时仍会出现错误:Runtime Error Uncaught(in promise):cordova_not_available。目前还不确定是什么原因导致的,因为它并不一致,有时会出现,有时又可以正常工作。 - groo
即使进行了所有的安装,仍然出现相同的错误。我注意到CLI观察到插件已经在运行cordova plugin add cordova-plugin-x-toast --save时被安装了。 - kolexinfos
@kolexinfos - 只有在使用 ionic run android 而不带 -lc 选项时才能正常工作,当使用 ionic serve 或者 ionic run android -lc yes 时,错误仍然存在,因为 Cordova 插件在浏览器中不可用。我在 Android 中所做的是使用 ionic run android 命令,然后使用以下命令对日志进行尾随以查看控制台:adb logcat |grep -i "console",这样我仍然可以跟踪日志。 - groo
我知道 Cordova 在浏览器中不可用,但我的意思是即使在设备上运行,它也会抛出 Cordova_not_unavailable 错误。我可以使用 Google Chrome 的远程设备控制台查看到这一点,并且 Toast 也不显示。 - kolexinfos
@kolexinfos - 当你提到你正在使用Google Chrome的远程设备控制台时,它将无法工作...你可能正在使用livereload,在这种情况下cordova插件不可用。请尝试仅在设备模拟器上运行,并且不要连接Chrome远程设备控制台...为了查看日志,请使用adb logcat(如果是Android):adb logcat | grep -i "console" - groo

7

使用 ionic serve 命令会禁用所有 cordova 插件,因为它并不在设备上运行。

建议使用 ionic cordova run android 命令,这将启动一个安卓模拟器,让所有 cordova 插件都能够正常运行。

我也遇到过第二种方法,但语法必须改成windows['plugins'].googleplus.login(...)


看起来现在可能已经改成了:ionic cordova run android - Ash

2
有时候使用 ionic cordova run browser 不是最佳选择,因为编译更改需要很长时间。
在我的情况下,导致问题的原因是 FCM 插件。如果我使用 ionic serve,则无法在浏览器上运行。由于我的代码位于 app.component.ts 中,所以解决问题很容易。我只需使用以下代码行:
  if (platform.is('cordova')) 
     {  this.fcmx.onTokenRefresh().subscribe(token => { 
     this.pushNoti.storeNewToken(token); }); }

使用 platform.is('cordova'),您可以防止代码在浏览器上运行出现问题。


0

只需连接 Android 设备后运行即可

ionic cordova run android

请确保您正确设置了谷歌地图密钥


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接