cordova打开web页如何再跳回来。

新手上路,请多包涵

1、场景:登陆是一个统一的登录页面。认证后携带认证过的信息再跳回来。
cordova下使用InAppBrowser能够跳到验证页面、验证完成后跳转不回来

跳转的代码
`cordova.InAppBrowser.open(config.djgLoginUrl + '?CallbackUrl=' + window.location.href,
'_blank', 'location=no,toolbar=yes,toolbarposition=top,closebuttoncaption=关闭');`

验证ok后、php会echo <script>window.location.href=$CallbackUrl</script>
$CallbackUrl的值是:file:///android_asset/www/index.html#/student/courseIndex
但是跳转不回来。现在的url是http://xxxx.com这种

问题:怎么样可以在验证完成后跳回cordova开发的app中

阅读 3.6k
2 个回答
✓ 已被采纳新手上路,请多包涵

参考的以一篇外国帖子链接

这是我的解决代码

//学生登陆
      Slogin(){
        var _this = this;
        var win = cordova.InAppBrowser.open(config.djgLoginUrl + '?CallbackUrl=' + window.location.href, '_blank', 'location=no,hidden=yes');
        win.show();
        win.addEventListener("loadstop", function() {
          var loop = setInterval(function () {
            win.executeScript(
              {
                code: "document.body.innerHTML"
              },
              function (values) {
                var name = values[0];
                if (name.indexOf('sos123') >= 0) {
                  clearInterval(loop);
                  //设置学生端Token
                  localStorage.setItem('StudentToken',name)
                  _this.$router.push({path:"/student/styleExam"});
                  win.close();
                }
              }
            );
          });
        });
      },

用了InAppBrowser插件、
后台那边会输出 echo <script>document.write('sos123:用户ID')</script>

新手上路,请多包涵

这两天刚有这个类似sso的需求,思路是受主楼启发,一路找到了github。最新dev分支的inAppBrowser已经支持已postMessage的方式传值。不需要这样暴力监听的模式了。
首先要安装3.1.0-dev的inAppBrowser,如果已经装过 以前的要卸掉。
cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser.git
然后就可以用新api了

var url = "https://braintree.github.io/popup-bridge-example/this_launches_in_popup.html";
iab = cordova.InAppBrowser.open(url, '_blank');
iab.addEventListener('message', function(e) {
    var msg =  JSON.stringify(e);
    iab.close();
    console.log("Message received: " +msg);
    alert(msg);
});
iab.addEventListener('loadstop', function (e) {
    iab.executeScript({
        code: "(function() { " +
            "var body = document.querySelector('body'); " +
            "var button = document.createElement('button'); " +
            "button.innerHTML = 'Click Me'; " +
            "body.appendChild(button); " +
            "button.addEventListener(\"click\",function(e){" +
                "var message = {my_message: 'Hello World!'};" +
                "webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));" + 
            "},false);" +
        "})(); "
    });
});

要注意用webkit.messageHandlers.cordova_iab.postMessage(msg) 这个方法传出来的参,必须是json字符串,否则不能触发外面的message事件。

推荐问题