2015-10-05 50 views
1

试图通过外部服务验证我的离子应用程序上的用户,我需要使用cordovas在应用程序浏览器!该代码在Android上完美工作,但是在iOS上,“loadstop”事件永远不会触发,因此浏览器不会将其自身重定向回应用程序。代码我看起来像这样:科尔多瓦在应用程序浏览器事件不发射IOS

$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(); 
     } 
     } 

当代码运行时,屏幕上不显示任何提示。另外,一旦应用程序已经到达外部服务并且用户的用户名被输入,它就会被重定向到另一个URL,然后用户将使用另一组凭据进行身份验证。这又会返回应用程序的令牌来验证使用情况。因此,在一个完美的iOS世界里,它与当前的android体验相匹配,loadstop事件触发三次,第三次“loadstop”事件触发,正则表达式返回true并关闭应用程序中的大括号。

如果我需要提供更多的代码来帮助解决这个问题,请让我知道!

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

UPDATE:运行在模拟器上的应用程序和检查控制台日志的时候,我发现这个错误:

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

我已经安装了插件,所以我不知道它是如何丢失的插件。有没有人有这方面的补救措施?谢谢!

回答

0
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'; 

      } 
     } 
           ); 
+0

不幸工作。还是)感谢你的建议! – MattA

+0

@MattA你能找到解决这个问题的方法。我面对同样的情况 –

相关问题