【问题标题】:Ionic 2 cordova InAppBrowser browser.close() is not a functionIonic 2 cordova InAppBrowser browser.close() 不是函数
【发布时间】:2017-11-24 07:14:34
【问题描述】:

我在我的 ionic 应用程序中集成了一个支付网关,我在服务器端使用节点 js。单击按钮后,我使用 ionic native inAppBrowser 将用户重定向到支付网关页面,之后我正在监听 url 事件。支付成功后,浏览器会重定向到成功的url,否则会重定向到失败的url。基于此,我正在处理应用程序中的 UI。我的问题是当我收听成功/失败的 url 并调用 close browser 事件时,我收到此错误。

未捕获的类型错误:this.browser.close 不是函数

我也尝试过 hide() 方法,但我得到了同样的错误。 以下是我的代码。

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Http } from '@angular/http';
import { InAppBrowser, InAppBrowserEvent } from '@ionic-native/in-app-browser';
@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {
  event : any;
  browser:any;
  failed : boolean = false;
  success : boolean = false;
  constructor(public navCtrl: NavController, private http: Http,private iab: InAppBrowser) {

  }

  payment(){
    this.browser = this.iab.create('http://192.168.0.59:3000/post').on("loadstop")
     .subscribe((ev: InAppBrowserEvent) => {

              if(ev.url == "http://192.168.0.59:3000/failure"){
                console.log("payment failed");
                this.failed = true;
                this.closeBrowser();
              }else if(ev.url == "http://192.168.0.59:3000/success"){
                console.log("payment success");
                this.success = true;
              }

          });

      }

      closeBrowser(){
        this.browser.close();
      }

    }

我还在真实设备上测试该应用程序,因此没有任何科尔多瓦或平台问题...请告诉我我犯了什么错误。 正确的描述和答案对我以后的参考很有帮助。

【问题讨论】:

    标签: angular ionic-framework


    【解决方案1】:

    尝试在构造函数中添加以下行:

    this.browser = this.iab.create('http://192.168.0.59:3000/post');
    

    您也可以为此目的使用 const,例如:

    const browser = this.iab.create('http://192.168.0.59:3000/post');
    

    然后,在支付方式中就行了

    this.browser.on("loadstop")
    .subscribe((ev: InAppBrowserEvent) => {
        // check conditions according to logic
    });
    

    如果在构造函数中使用const browser,您可以简单地使用 browser.on()。然后在 closeBrowser() 方法中,this.browser.close(); 将起作用。

    检查Official Documentation

    【讨论】:

    • 那行得通,但问题是什么...只需将 this.browser 更改为 const browser 就可以了,有什么区别...
    • 应用内浏览器 API 需要它对于实例来说是常量。最后,您在构造函数中还是在相同的先前位置(内部方法)中使用了它?通常 const 在类的顶部声明(以使其在类级别可访问)
    • 我在payment()方法里面的同一个地方用过...非常感谢
    猜你喜欢
    • 2017-11-03
    • 2021-07-02
    • 2016-10-09
    • 1970-01-01
    • 2017-05-24
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多