Как обнаружить перенаправленный URL в Cordova в AppBrowser и закрыть браузер - PullRequest
0 голосов
/ 13 февраля 2019

Я использую Cordova Inappbrowser для моего ионного приложения.Мне нужно определить, когда URL перенаправляет на http://xx.success.html or http://xx.failure.html

мой код:

public openWithCordovaBrowser(url: string) {
    //where are events triggered (_self,_blank,_window)?
    let target = "_self"; 

    let inAppBrowserObject = this.inAppBrowser.create(url, target, this.inAppBrowserOptions);

                //When the page is success, close inappbrowser
    if (inAppBrowserObject.on('loadstart').subscribe) {
      inAppBrowserObject.on('loadstart').subscribe((e: InAppBrowserEvent) => {
        if (e && e.url) {
          if (e.url.includes('success.html')) {
            inAppBrowserObject.close(); //not reached?
          }
        }
      });
    }

               //When the InAppBrowser is closed, check and use the last viewed URL
    if (inAppBrowserObject.on('exit').subscribe) {
      inAppBrowserObject.on('exit').subscribe((e: InAppBrowserEvent) => {
        if (url) {
        console.log('exit: ' + e); //this is reached
        }
      });
    }
  }

не работает и inAppBrowserObject.close() никогда не вызывается.

ошибка в консоли Chrome Dev:

Error in Success callbackId: InAppBrowser780208391 : TypeError: Object(...) is not a function
cordova.js:310 TypeError: Object(...) is not a function
    at InAppBrowserObject.close (vendor.js:81063)
    at SafeSubscriber._next (main.js:411)
    at SafeSubscriber.__tryOrUnsub (vendor.js:20899)
    at SafeSubscriber.next (vendor.js:20846)
    at Subscriber._next (vendor.js:20786)
    at Subscriber.next (vendor.js:20750)
    at Channel.fire (cordova.js:843)
    at InAppBrowser._eventHandler (inappbrowser.js:48)
    at cb (inappbrowser.js:108)
    at Object.callbackFromNative (cordova.js:291)

Но закрытие браузера вызывает console.log('exit: ' + e);

мой объект inAppBrowser выглядит так: enter image description here

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

это проблема с плагином Cordova. Ссылка на выпуск


Я удалил плагины cordova и npm 5.xx и установил 4.20.0.Это решило проблему.

удалить старые версии:

cordova plugin remove cordova-plugin-inappbrowser
npm uninstall @ionic-native/in-app-browser --save

установить версию 4.20.0:

ionic cordova plugin add cordova-plugin-inappbrowser
npm install --save @ionic-native/in-app-browser@4.20.0

также импорт изменен с

import { InAppBrowser, InAppBrowserObject } from '@ionic-native/in-app-browser/ngx'

до

import { InAppBrowser, InAppBrowserObject } from '@ionic-native/in-app-browser'
0 голосов
/ 09 апреля 2019

У меня есть это решение, работающее хорошо с cordova 8 и ionic 3.20. Нужно ли вам вызывать .show.Кажется, это связано с тем, что экран никогда не находится в состоянии .show - может быть?Если ваш браузер скрыт по умолчанию.

  const iabrowser = this.inAppBrowser.create(this.signupUrl,'_self',iabOptions);

  this.loader.presentLoading();
    iabrowser.on('loadstart').subscribe(event =>{
    console.log(event);
    iabrowser.executeScript({code: "alert('loadstart! I am an alert box!!')"});
    if (event && event.url) {
        if (event.url.includes('/app/main/login')) {
            iabrowser.close();
        }
    }
    iabrowser.show();
  });
  iabrowser.on('loadstop').subscribe(event =>{
    console.log(event);
    this.loader.dismissLoading();
  });
0 голосов
/ 14 февраля 2019

Похоже, вы ссылаетесь здесь на два разных случая.Попробуйте с целью как «_blank».Документация Cordova гласит:

_self: Открывается в Cordova WebView, если URL-адрес находится в белом списке, в противном случае он открывается в InAppBrowser.

_blank: Открывается в InAppBrowser.

Ссылка: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-inappbrowser/

...