我目前在IOS和Android上使用IONIC v1.0.0,AngularJs和ngCordova v0.1.23-alpha。
我遇到了登录视图冻结的问题。 它在打开InAppBrowser并点击“返回应用程序”(用于IOS的关闭按钮标题返回)后会冻结我的登录视图,从而无法触摸整个屏幕并使我无法登录。只有当我在启动应用程序时调用InAppBrowser时才会发生这种情况,如果我在应用程序生命周期中使用它(登录后),它就不会这样做。
以下是我的一些代码
在app.js中:
angular.module('MyApp', ['ionic', 'MyApp', 'ngCordova', 'mainController', 'loginController', 'pascalprecht.translate', 'ngStorage', 'ngSanitize', 'ngAnimate', 'ngTouch', 'ngCookies', 'ngLocale', 'testController'])
在mainController中我有工厂:
.factory('customMainFunction', function ($rootScope, $ionicLoading, $ionicScrollDelegate, $ionicPopup, $timeout, $localStorage, $location, $ionicHistory, $window, $cordovaInAppBrowser) { var Token = ""; return { openBrowser: function (link) { var options = { location: 'yes', clearcache: 'yes', toolbar: 'yes', closebuttoncaption: 'Back to App' }; document.addEventListener("deviceready", function () { $cordovaInAppBrowser.open(link, '_blank', options) .then(function (event) { // success }) .catch(function (event) { // error }); }, false); $rootScope.$on('$cordovaInAppBrowser:loadstart', function (e, event) { //console.log(event); var url = ""; var positionNumber; var res; url = event.url; positionNumber = url.search("ssoToken="); res = url.substr(Number(positionNumber)+9); /*positionNumber = url.search("module="); res = url.substr(Number(positionNumber)+6);*/ if(url !== "" && positionNumber >= 0 && res.length > 0) { $rootScope.$broadcast('ssoToken', { token: res }); $cordovaInAppBrowser.close(); } }); $rootScope.$on('$cordovaInAppBrowser:loadstop', function (e, event) { console.log("loadstop"); //console.log(event); // insert CSS via code / file //$cordovaInAppBrowser.insertCSS({ // code: '' //}); // insert Javascript via code / file //$cordovaInAppBrowser.executeScript({ // file: '' //}); }); $rootScope.$on('$cordovaInAppBrowser:loaderror', function (e, event) { }); $rootScope.$on('$cordovaInAppBrowser:exit', function (e, event) { }); } } })
如果有人遇到此类问题,请告诉我可以采取哪些措施来解决问题。任何问题或澄清让我知道。提前谢谢。
答案 0 :(得分:0)
发现了我自己的问题。基本上这个问题与线程有关。 Look for Threading。我是怎么知道的?在XCode上,我能够看到一条消息:
线程警告:['InAppBrowser']花了'108.12'ms。插件应该使用 后台线程
有两种方法可以解决这个问题(我相信):
1-使用背景线程(就像消息状态一样)。请参阅: How to run cordova plugins in the background?
2-在setTimeout中包装openBrowser函数调用(在我的例子中)。这将延迟调用,直到线程完成并且UI不会被阻止。完成后(在我的情况下)它打开了inAppBrowser,当我点击“返回应用程序”时,UI根本就没有阻止。
希望这可以帮助那些人。