Cordova In App Browser event not firing IOS

寵の児 提交于 2020-01-15 07:37:08

问题


Trying to authenticate users on my ionic application through an external service and I need to use cordovas In app browser! The code works perfectly on android however on iOS the "loadstop" event never fires and thus, the browser never redirects itself back to the application. The code I have looks like this:

$rootScope.$on('$cordovaInAppBrowser:loadstop', function (e, event) {
        console.log('inappbrowser loaded', event);

        var regex = /* regex to determine if url is correct redirected url */
        var res = regex.test(event.url);
        alert('loaded: ' + event.url);
        alert('regex result: ' + res);
        if(res === true) {
          $cordovaInAppBrowser.close();
        }
      });

      if(okta) {
        if (typeof window.localStorage.msRefreshToken === 'undefined') {
          document.addEventListener('deviceready', function () {
            $cordovaInAppBrowser.open('urlforExternalservicehere', '_blank', options);
          }, false);
        } else {
          TokenStore.refreshAccessToken();
        }
      }

when the code is run no alert appears on the screen. Also, once the app has reached the external service and the username of the user is entered, it is then redirected to another url, which the user will then use another set of credentials to authenticate against. This in turn returns a token for the application to authenticate use.

Thus, in a perfect iOS world where it matches the current android experience, the loadstop event fires three times, and the third time the "loadstop" event would fire and the regex would return true and close the in app broswer.

If I need to supply more code to help solve this issue please let me know!

Cordova Version: 4.2.0
Ionic: 1.4.5
iOS: 8 and 9
Using NgCordova for Cordova functionality

UPDATE: when running the application on an emulator and checking the console logs, I find this error:

Error: Module cordova-plugin-inappbrowser.inappbrowser does not exist., http://10.117.1.46:8100/cordova.js, Line: 1402

I have the plugin installed so I don't know how its missing the plugin. Does anyone have a remedy for this? Thanks!


回答1:


 iabRef = window.open('http://XYZ.php', '_blank', 'location=no,toolbar=no');
         iabRef.addEventListener('loadstart', iabLoadStart);
         iabRef.addEventListener('loadstop', iabLoadStop);
         iabRef.removeEventListener('loaderror', iabLoadError);
         iabRef.addEventListener('exit', iabClose);
         iabRef.addEventListener('loadstart', function(event) {

          if (event.url.match("mobile/close")) {
              iabRef.close();
              window.location = 'index.html';

          }
        }
                               );



回答2:


Problem was my iOS platform wasn't latest.

So when you developing apps using cordova make sure your platform versions and plugins are up-to date with OS upgraded.

So all I had to do is

Removing iOS platform.

cordova platform rm ios

Adding iOS platform - Latest Version

cordova platform add ios

Removing the plugin cordova-plugin-inappbrowser

cordova plugin remove cordova-plugin-inappbrowser

Adding the plugin cordova-plugin-inappbrowser - Latest Version

cordova plugin add cordova-plugin-inappbrowser



来源:https://stackoverflow.com/questions/32955807/cordova-in-app-browser-event-not-firing-ios

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!