window.open不能在http post angular中工作

时间:2016-01-12 20:06:42

标签: javascript angularjs mobile window.open

这是我的代码:

        $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遇到了同样的问题并修复了它。但是同样的解决方案在这里并不适用于角度。

1 个答案:

答案 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);
    });

注意:我测试过这是一个浏览器,在手机中不确定,但这应该有效)