“Window”类型上不存在属性“cordova”。 :离子

问题描述 投票:0回答:5

在我的代码中,我收到的错误为

Property 'cordova' does not exist on type 'Window'.
这就是我收到错误的地方
var browserRef = window.cordova.InAppBrowser.open()

我还安装了

typings
,但我仍然收到此错误。我该如何解决这个问题?

cordova ionic-framework ionic2 ionic3 cordova-plugins
5个回答
31
投票

这只是 Typescript 的抱怨,因为

cordova
不是
window
对象定义的一部分。有几种方法可以避免该错误:

一种方法是声明

window
类型的
any
属性,如下所示:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

declare let window: any; // <--- Declare it like this

@Component({
  selector: 'page-demo',
  templateUrl: 'demo.html'
})
export class DemoPage {

  constructor(public navCtrl: NavController, ...) { }

  public yourMethod(): void {
    var browserRef = window.cordova.InAppBrowser.open(); // <--- and use it like this
  }

}

另一种方法是将

window
对象转换为
any
类型,在您想要使用它的同一语句中:

var browserRef = (<any>window).cordova.InAppBrowser.open();
// or
var browserRef = (window as any).cordova.InAppBrowser.open();

如果您不想使用

any
,您还可以根据您要调用的方法定义
window
对象的类型:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

declare let window: {
  cordova: {
    InAppBrowser: {
      open: () => {};
    }
  }
}

@Component({
  selector: 'page-demo',
  templateUrl: 'demo.html'
})
export class DemoPage {

  constructor(public navCtrl: NavController, ...) { }

  public yourMethod(): void {
    var browserRef = window.cordova.InAppBrowser.open();
  }

}

2
投票

Cordova 仅在设备上执行,不在浏览器中执行。在浏览器中查看构建时避免错误的方法是将 Cordova 命令包装在平台 if 语句中。例如:

import { Platform } from 'ionic-angular';
import { InAppBrowser } from '@ionic-native/in-app-browser';

constructor( private platform: Platform, private iab: InAppBrowser ) {
    this.platform.ready().then(function () {
        if (platform.is('cordova')) {
            // your code, eg:
            this.iab.create('http://google.com/', '_blank');
        }
    });
}

2
投票

另一个解决方案是改变

window.cordova

window['cordova']

1
投票

在 Typescript 4 中,tslint 不再喜欢

<any>
演员。

现在似乎更喜欢这个。

 var browserRef = (window as any).cordova.InAppBrowser.open();

0
投票

不要使用

any
类型(这绝不是一个好主意),而是尝试在 tsconfig.json 中配置此
type

{
  "compilerOptions": {
    "types": ["cordova"]
  },
}
© www.soinside.com 2019 - 2024. All rights reserved.