这是我的代码:
$rootScope.http({
url: myUrl,
method: "POST",
data: "",
}).success(function (data) {
alert(data.uri); //for test, and I see correct uri shows up here.
window.open(data.uri, ''); return false; //window doesn't open.
});
window.open在.success
内部不起作用,但它在http post方法之外工作。回调函数出现问题。我在$.ajax
遇到了同样的问题并修复了它。但是同样的解决方案在这里并不适用于角度。
答案 0 :(得分:1)
我们之前遇到过类似的问题,原因很简单;在大多数现代浏览器中,浏览器不允许window.open()
调用,这不是用户活动的直接结果。
此处,您的window.open()
在异步调用中被触发,该调用未被用户操作调用,例如:单击链接或按钮。
您可以通过禁用弹出窗口阻止程序来解决此问题,但我们必须通知用户他们的弹出窗口阻止程序已启用。为此,你可以这样做:
$rootScope.http({
url: myUrl,
method: "POST",
data: "",
}).success(function (data) {
$rootScope.popupWindow = window.open(data.uri, '');
$timeout(function() {
// Check if popup blocker is enabled by verifying the height of the new poup
if (!$rootScope.popupWindow || $rootScope.popupWindow.outerHeight === 0) {
alert("Please disable the popup blocker");
}
}, 1000);
});
(注意:我测试过这是一个浏览器,在手机中不确定,但这应该有效)