【问题标题】:window.open doesn't work in http post angularwindow.open 在 http post angular 中不起作用
【发布时间】:2016-01-12 20:06:41
【问题描述】:

这是我的代码:

        $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 不是你想的那样。
  • 而 $window.open() 不起作用?
  • 我正在为移动设备做这个开发,所以我看不到弹出窗口拦截器。我有一个不太好的解决方法,就是在回调之前执行var win = window.open(),然后在.success 内部,通过win.location = ... 更改窗口的位置。但它并没有给出很好的视觉效果。我的意思是用户会看到一个空白页面一秒钟,然后跳转到实际的 url,这并不酷。
  • 我上面提到的修复在 chrome 浏览器中工作正常,但在 safari 中更慢,我想知道有没有更好的方法来解决这个问题。如果没有,我将使用当前修复。
  • 这在 Chrome 中对我来说很好用。很好奇,如果你只尝试window.open()window.open(data.uri) 是否有效?

标签: javascript angularjs mobile window.open


【解决方案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);
    });

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

【讨论】:

  • 但是如何禁用手机上的弹出窗口阻止程序?恐怕大多数用户也不知道该怎么做……我在 iphone 上测试了 chrome,似乎根本没有启用/禁用弹出窗口的选项。
  • 不要使用弹窗
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 2017-12-20
  • 1970-01-01
  • 2012-05-23
  • 2018-11-06
相关资源
最近更新 更多