让jquery弹出窗口不被阻挡

以下代码,从服务器端得到一个计算过的URL,然后打开新页面。


$("#btn_ok").click(function() {
            var entry_id = $("#entry_id").val();
            var url= "{% url 'zinnia:entry_reward'%}";
            var amount = 5;
            if($("input[name='radio_award']:checked").val() =="0")
                amount = $("#option_amount").val();
            else
                amount = $("#custom_award").val();
            var post_data = {'entry_pk': entry_id, 'amount': amount};

            $.post(url,
                  post_data,
                  function(data) {
                      if (data.status) {
                         window.open(data.url);
                         
                      }
                      else
                      {
                          alert("赞赏未成功。"+data.message);
                          $('#myModal').modal('hide');  // 关闭模态窗口
                      }
                  });

实际上会被 猎豹等浏览器阻挡。

原因是: jquery的异步调用,使得window.open新开页面没有被信任的上下文。设置$.ajax的async为false,可以解决,但会block当前窗口。


stackoverflow有人提出更好的解决办法。

建立一个空白window,再把新的url赋值给它。


var window_0 = window.open('');
...
window_0.location = data.url;

比较完美解决。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

容沁风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值