this.navCtrl.setRoot在Cordova InAppBrowser web-view IONIC 2/3

时间:2018-03-09 12:02:19

标签: cordova ionic-framework ionic2 ionic3 inappbrowser

我正在我的离子应用程序中实施 PayYouMoney 支付网关,为此我必须调用网络视图页面进行支付交易,我希望应用程序回到我的离子 thankyou 和根据网络视图网址条件,来自webview的失败页面。下面是我的代码:

var url = 'https://www.sansuiscales.com/web/payment.php';
    var target = '_blank';
    var options = "location = yes"
    var ref = cordova.InAppBrowser.open(url, target, options);

 ref.addEventListener('loadstart', loadstartCallback);
 ref.addEventListener('loadstop', loadstopCallback);


function loadstopCallback(event) {
   if(event.url == "https://www.myDomainname.com/web/success.php") {
    this.navCtrl.setRoot(thankyou); // not working
   // ref.close();
    }

   if(event.url == "https://www.myDomainname.com/web/failour.php") {
    this.navCtrl.setRoot(failed); // not working
   // ref.close();
    }
}


function loadstartCallback(event) {
       alert(event.url);
    }

为什么 this.navCtrl.setRoot()无法正常工作,我该如何实现?

2 个答案:

答案 0 :(得分:0)

只需编译并在手机上运行即可。它不会在浏览器上工作,但会在手机上工作。

答案 1 :(得分:0)

在JavaScript函数中调用

this.navCtrl.setRoot()指的是 navCtrl 不可用的上下文。您需要将其绑定到正确的上下文(使用旧方式self = this)或考虑使用箭头函数

var loadstopCallback = (event) => {
   if(event.url == "https://www.myDomainname.com/web/success.php") {
    this.navCtrl.setRoot(thankyou); // not working
   // ref.close();
    }

   if(event.url == "https://www.myDomainname.com/web/failour.php") {
    this.navCtrl.setRoot(failed); // not working
   // ref.close();
    }
}

详细了解箭头功能https://www.sitepoint.com/es6-arrow-functions-new-fat-concise-syntax-javascript/