InAppBrowser没有关闭?

时间:2016-01-07 13:59:41

标签: android cordova inappbrowser

我正在使用带有Cordova的InAppBrowser插件(v1.1.1)进行OAuth登录过程。不幸的是,InAppBrowser似乎没有关闭浏览器。我的" closeBrowser"函数反而不断触发间隔,浏览器仍保留在Android屏幕上(此时我还没有尝试过其他设备。)

有没有办法强制关闭除.close()以外的InAppBrowser,或隐藏它?或许我的代码中存在一个锁定浏览器的缺陷。

LogInPage.prototype.handleExternalLogin = function (externalLogin) {
    var _this = this;

    var ref = window.open(Environment_1.settings.baseUrl + externalLogin.route.url, "_blank", "location=no");
    ref.addEventListener('loadstart', function (event) {
        if (_.startsWith(event.url, Environment_1.settings.baseUrl + "/api/Account/account/ExternalLoginCallback")) {
            // Now we want to load a different url that will give us the mobile access token
            console.log('get external-mobile-token');
            _this.closeBrowser(ref);

            var ref2 = window.open(Environment_1.settings.baseUrl + "/api/Account/external-mobile-token", "_blank" /*, "location=no"*/);

            ref2.addEventListener('loadstop', function (event) {
                console.log('loadstop ' + event.url);
                if (event.url == Environment_1.settings.baseUrl + "/api/Account/external-mobile-token") {
                    ref2.executeScript({ code: 'window.document.documentElement.innerText' }, function (contents) {
                        _this.login(contents);
                        _this.closeBrowser(ref2);
                    });
                }
            });

            ref2.addEventListener('loaderror', function (event) {
                console.log(event);
                _this.closeBrowser(ref2);
                // TODO - do something?
            });
        }
    });

    ref.addEventListener('loaderror', function (event) {
        console.log(event);
        _this.closeBrowser(ref);
        // TODO - do something?
    });
};

LogInPage.prototype.closeBrowser = function (browser) {
    var interval = setInterval(function () {
        console.log('closing');
        browser.close();
    }, 10);

    browser.addEventListener('exit', function () {
        console.log('closed');
        clearInterval(interval);
    });
};

LogInPage.prototype.login = function (token) {
    console.log(token);
};

上面的代码实际上是从TypeScript生成的,但我认为我不会混淆这个问题。

1 个答案:

答案 0 :(得分:0)

似乎关闭InAppBrowser并同时打开另一个导致问题;重写过程只需要一个窗口解决了我的问题。