我有以下情况:
confirm dialog
),我会打开包含一些网址的新标签。我的问题是:我总是遇到弹出窗口阻止程序,因为我只在错误回调后生成window
。以下是相关代码login
方法:
$scope.login = function () {
$auth.login({
email: $scope.fields.email,
password: $scope.fields.password
})
.then(function () {
// ... login success
})
.catch(function () {
// login failed (my case)
if (confirm('ERROR: Invalid password, forgot Password? Click \'OK\' if you want to reset it')){
var url_ = 'http://meeter.me/#/forgot-pass/snaggs@gmail.com';
var myPopup = window.open ('', '_blank');
myPopup.location = url_;
if (myPopup && myPopup.focus) {
myPopup.focus();
}
}// if
});
};
如果我将var myPopup = window.open ('', '_blank');
移到$scope.login = function ()
下的下一行,它会有效,但会打开新的空标签。
我想在登录时出现错误
时才打开新标签页我使用satellizer
请帮忙,
在演示中,我使用单$timeout
来模拟异步调用
答案 0 :(得分:0)
我不认为如果异步调用window.open就可以打开一个新窗口。在没有用户调用的情况下,调用堆栈总是要识别window.open是异步触发并阻止它。如果登录失败,可以选择显示一个新按钮并让该按钮打开一个新窗口?
http://plnkr.co/edit/QGfnxH484OdTvaaOvMaE?p=preview
<button ng-click="init();">press me</button><br />
<span ng-show="resetPwd" >
Login Failed!! <button ng-click="reset()">Reset Password</button>
</span>
$scope.init = function() {
$timeout(function() {
$scope.resetPwd = true;
}, 2000);
}