InAppBrowser 没有关闭?

Posted

技术标签:

【中文标题】InAppBrowser 没有关闭?【英文标题】:InAppBrowser not closing? 【发布时间】:2016-01-07 13:59:40 【问题描述】:

我将 InAppBrowser 插件 (v1.1.1) 与 Cordova 一起用于 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】:

似乎关闭InAppBrowser 并同时打开另一个是导致问题的原因;将流程重写为只需要一个窗口即可解决我的问题。

【讨论】:

以上是关于InAppBrowser 没有关闭?的主要内容,如果未能解决你的问题,请参考以下文章

单击inappbrowser中启动的页面上的按钮时如何关闭phonegap inappbrowser?

打开和关闭inappbrowser 在ios 7 底部phonegap+sencha 带来白条

如何使用未完成按钮顶部栏的按钮关闭 inAppbrowser

Cordova/iOS:如何关闭使用 InAppBrowser 打开的本机浏览器窗口?

addEventListener('exit') 到 PhoneGap 中的 inappbrowser

Cordova inAppBrowser 如何隐藏 URL 并仅显示完成按钮