window.open没有'我不在http postangular工作

window.open doesn't work in http post angular

本文关键字:http postangular 工作 open 没有 window      更新时间:2023-09-26

这是我的代码:

        $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中遇到了同样的问题并修复了它。但同样的解决方案在这里对angular不起作用。

我们之前也遇到过类似的问题,原因很简单;在大多数现代浏览器中,浏览器不允许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);
    });

注意:我已经测试过这是一个浏览器,不确定在移动设备中,但它应该可以工作)