InAppBrowser 没有关闭?
InAppBrowser not closing?
我将 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 生成的,但我想我不会混淆这个问题。
似乎是关闭一个 InAppBrowser
并同时打开另一个导致了这个问题;将流程重写为只需要一个 window 解决了我的问题。
我将 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 生成的,但我想我不会混淆这个问题。
似乎是关闭一个 InAppBrowser
并同时打开另一个导致了这个问题;将流程重写为只需要一个 window 解决了我的问题。