2017-10-20 40 views
1

Ce code ci-dessous fonctionne très bien dans Android. mais, cela ne fonctionne pas dans IOS.IONIC 2 InAppBrowser ne fonctionne pas dans IOS

Nous pensons que le navigateur.executeScript ne fonctionne pas ici. Ici, nous recevons l'URL de redirection de l'API en tant que contenu html (this.paymentGatewayDetails) et nous devons l'ouvrir. Cela fonctionne très bien dans Android.

  1. en essayant ceci dans le téléphone IOS 11.0.

  2. IONIC version 2.2

  3. Plugin @ ionique natif/in-app-navigateur ": "^ 4.3.2"

Ceci est la fonction que nous essayons d'exécuter

.
callGateway() { 
return new Promise(
    (resolve, reject) => { 

    let injected = false; 

    if (!this.paymentGatewayDetails) { 
     reject("PG_DET_INVALID") 
    } 

const browser = this.iab.create("about:blank", "_blank", "location=no"); 
    browser.show() 

    //inject html code to blank page. one time 
    browser.on("loadstop") 
     .subscribe(
     (sucess) => { 
     if (!injected) { 
      browser.executeScript({ code: "document.write('" + this.paymentGatewayDetails + "');" }).then(
      (sucess) => { 
       console.log("sucess"); 
       browser.executeScript({ code: "document.mypg.submit();" }).then(
       (sucess) => { 
        console.log("sucess redirection"); 
       }, (err) => { 
        console.log("error redirection"); 
       } 
      ); 
      }, (err) => { 
       console.log("err") 
      } 
     ); 
      injected = true;    
     } 
     console.log("success url is", sucess.url); 
     if (sucess.url.includes("mobile.mypg.com")) { 
      //payment gateway call sucess. 
      browser.close() 
      resolve("PG_CALL_SUCC") 
     } 
     } 
    )} 

nous avions donné au fichier plist

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict> 

Et dans index.html>

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; script-src 'self' 'unsafe-inline' 'unsafe-eval' *; style-src 'self' 'unsafe-inline';”> 

Nous avions installé le plug-in aussi Whitelist

cordova-plugin-whitelist

Dans config.xml ajouté ces lignes aussi

<content src="index.html" /> 
<access origin="*" subdomains="true" /> 
<allow-navigation href="http://*/*" /> 
<allow-navigation href="https://*/*" /> 
<allow-navigation href="data:*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

plug-in cordova ls

com.darktalker.cordova.screenshot 0.1.5 "Capture d'écran"

cordova-plugin-actionsheet 2.3.3 "Feuille d'action"

cordova-plugin-compat 1.1.0 "Compat"

cordova-plugin-console 1.0.5 "Console"

cordova-plugin-dispositif 1.1.4 "Device"

cordova-plugin -dialogs 1.3.3 "notification"

cordova-plugin-2.1.2 fcm "FCMPlugin"

cordova-plugin-2.4 géolocalisation.3 "Géolocalisation"

cordova-plugin-mondialisation 1.0.7 "La mondialisation"

cordova-plugin-hotline 1.2.1 "plugin Hotline pour Phonegap"

cordova-plugin-inappbrowser 1.7.1 " InAppBrowser "

cordova-plugin-mfp 8.0.2017072706 "IBM MobileFirst Platform Fondation"

cordova-plugin-mfp-jsonstore 8.0.2017081712" IBM MobileFirst Platform Foundatio n JSONStore "

cordova-plugin-nativestorage 2.2.2 "NativeStorage"

cordova-plugin-okhttp 2.0.0 "OkHttp"

cordova-plugin-écran-orientation 2.0.1" Orientation de l'écran "

cordova-plugin-sms 1.0.5 "SMS"

cordova-plugin-splashscreen 4.0.3 "splashscreen"

cordova-plugin-2 statusbar .2.2 "StatusBar"

cordova-plugin-1.3.1 liste blanche "liste blanche"

cordova-plugin-x-socialsharing 5.1.8 "SocialSharing"

3.6.6 cordova.plugins.diagnostic " diagnostic »

ES6-promesse-plugin 4.1.0 "Promise"

-plugin-clavier ionique 2.2.1 "clavier"

uk.co.workingedge.phonegap.plugin.l aunchnavigator 4.0.4 "Lancer Navigator"

S'il vous plaît nous aider à résoudre ce problème ...

Merci

+0

Pouvez-vous modifier votre message pour inclure vos plugins cordova. 'plugins ioniques cordova ls –

Répondre

0

Je résolu la question.

browser.executeScript({ code: "document.write('" + this.paymentGatewayDetails + "');" }); est des œuvres pour IOS et Android

Ici, je l'avais enlevé .alors ( (sucess) => {

Maintenant, le nouveau code qui fonctionne dans les deux IOS et Android

callGateway() { 
return new Promise(
    (resolve, reject) => { 

    let injected = false; 

    if (!this.paymentGatewayDetails) { 
     reject("PG_DET_INVALID") 
    } 

const browser = this.iab.create("about:blank", "_blank", "location=no"); 
    browser.show() 

    //inject html code to blank page. one time 
    browser.on("loadstop") 
     .subscribe(
     (sucess) => { 
     if (!injected) { 
      browser.executeScript({ code: "document.write('" + this.paymentGatewayDetails + "');" }); 
       console.log("sucess"); 
       browser.executeScript({ code: "document.mypg.submit();" }).then(
       (sucess) => { 
        console.log("sucess redirection"); 
       }, (err) => { 
        console.log("error redirection"); 
       } 
      );   
      injected = true;    
     } 
     console.log("success url is", sucess.url); 
     if (sucess.url.includes("mobile.mypg.com")) { 
      //payment gateway call sucess. 
      browser.close() 
      resolve("PG_CALL_SUCC") 
     } 
     } 
    )} 

Je ne sais pas pourquoi ça ne marche pas là-bas. Si quelqu'un le sait, répondez s'il vous plaît.

Merci