J'utilise l'inappbrowser cordova pour mon application ionique. J'ai besoin de détecter quand l'URL redirige vers http: //xx.success.html
ou
http: //xx.failure.html
mon code:
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)
ne fonctionne pas et inAppBrowserObject.close () code > n'est jamais appelé.
erreur dans la console de développement Chrome:
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 } }); } }
Mais la fermeture du navigateur appelle console.log ('exit:' + e); code>
3 Réponses :
On dirait que vous faites référence à deux instances distinctes ici. Essayez avec la cible comme «_blank». La documentation Cordova dit:
_self: S'ouvre dans Cordova WebView si l'URL est dans la liste blanche, sinon il s'ouvre dans InAppBrowser.
_blank: s'ouvre dans InAppBrowser.
Référence: https: //cordova.apache. org / docs / fr / latest / reference / cordova-plugin-inappbrowser /
il s'agit d'un problème lié au plugin cordova. Lien du problème
J'ai supprimé les plugins cordova et npm 5.xx et installé 4.20.0. Cela a résolu le problème.
supprimer les anciennes versions:
import { InAppBrowser, InAppBrowserObject } from '@ionic-native/in-app-browser'
installer la version 4.20.0:
import { InAppBrowser, InAppBrowserObject } from '@ionic-native/in-app-browser/ngx'
importation également modifiée de
ionic cordova plugin add cordova-plugin-inappbrowser npm install --save @ionic-native/in-app-browser@4.20.0
à
cordova plugin remove cordova-plugin-inappbrowser npm uninstall @ionic-native/in-app-browser --save
Cette solution fonctionne bien avec cordova 8 et ionic 3.20 .. Auriez-vous besoin d'un .show pour être appelé. Semble être lié au fait que l'écran n'a jamais été en état .show - peut-être? Si votre navigateur est masqué par défaut.
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(); });
Pourriez-vous publier la sortie pour nAppBrowserObject.on ('loadstart')?
ajouté la sortie de débogage