cordova通过外部链接打开app,为什么handleopenurl方法不执行?

先直接贴关键代码:

$rootScope.goalBillId = '';//外部链接带过来的参数billId
var userInfo = null;//用于判断app用户是否已经登录
function onResume() {
    userInfo = Userinfo.getData('userData');
    getBillFromLink().then(function (data) {
        if(data.length>0 && !!userInfo){
            $state.go('public.saleOrderDetail');
            return;
        }
        if(data.length>0 && !userInfo){
            $state.go('public.login');
        }
    });
}
function getBillFromLink() {
    var deferred = $q.defer();
    $timeout(function() {
        window.handleOpenURL = function(url){
            if(!!url){
                $rootScope.goalBillId = url.split('billId')[1];
                deferred.resolve($rootScope.goalBillId);
            }else{
                $rootScope.goalBillId = '';
                deferred.reject($rootScope.goalBillId);
            }
        };
    }, 0);
    return deferred.promise;
}
$ionicPlatform.on("deviceready", function () {//app启动
    userInfo = Userinfo.getData('userData');
    document.addEventListener("resume", onResume, false);//监听app从后台被唤起的事件
    getBillFromLink().then(function (data) {
        if(data.length>0 && !!userInfo){
            $state.go('public.saleOrderDetail');
            return;
        }
        if(data.length>0 && !userInfo){
            $state.go('public.login');
            return;
        }
        $state.go('public.tabBuyer.index');
    });
});

现在的问题是这样的:
app未运行的时候,从外部链接打开app正常触发deviceready事件,成功通过getBillFromLink()中的 window.handleOpenURL方法获取传过来的url;
切换让app转入后台,再第一次通过外链打开app,此时触发resume唤起事件,执行onResume(),可以正常执行至getBillFromLink(),但不触发window.handleOpenURL
再一次让app转入后台,第二次通过外链打开app,此时能正常触发window.handleOpenURL,并且之后都是可以正常执行的。

想请教一下这种第一次从后台唤起app才存在的问题该如何解决?

阅读 4.4k
1 个回答
新手上路,请多包涵

请问这个问题您解决了吗 是怎么解决的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进