zoukankan      html  css  js  c++  java
  • 开不了的窗_____window.open

       window.open()是原来常用的新开窗口的方式,但是呢,现在会被大多数浏览器阻止掉,默认为是非用户意愿的打开窗口,即广告之类的。

    但是通过a链接的事件来open是可以的,因为这样会认为是用户主观的要打开另一个窗口所以不予以拦截。

       关于如何解决被阻止的问题,网上有很多种方式,一直未加以实践。前段时间项目中存在这样的需求,当时使用了几种方式,但是未生效,最后

    通过延迟更改location的方式终于解决掉了。下面结合实际讨论一下。

       1.a标签的直接事件,不会被拦截。代码如下: 

     links.on('click', function (e) {
          e.preventDefault();
          var _this = $(this);
          window.open('/bookmerchant/fun/');
      }

       2.ajax 请求之后,进行新开窗口的操作会被拦截掉,即使是a链接出发的事件。如下:

      
    self.addBtn.on('click', function (e) {
         /*ajax请求略去*/
        }).on('success', function (res) {
                if (res.code == 200) {
                    var cusId = res.data.customerId;
                    window.open('/bookmerchant/fun/');
      }
      此时的window.open()是不可行的。
    网上看到的解决措施:
    1.创建a标签然后,绑定事件,然后js触发。这种在我的实际操作中是同样被拦截的。
    2.在请求之前新开标签window.open();然后请求接受之后更改location,这样是可以的。
    var newTab=window.open('about:blank');
    /*ajax请求*/
    }).on('success', function (res) {
            if (res.code == 200) {
             newTab.location.href='/bookmerchant/fun';
    }
      3.还有一种方式是新开标签window.open(),然后通过setTimeout()来延迟设置location,原理相同应该也是可行的(此处未实践,所以不敢说一定)。
    4.通过form提交的方式进行跳转,同样未实践,不加评论。只是拿出来给大家一种提醒。

             

    如水穿石,厚积才可薄发
  • 相关阅读:
    Kubernetes 部署微服务电商平台(16)
    Android开发如何去除标题栏title
    eclipse中logcat偶尔不显示log的问题解决办法
    Two Sum
    事件的解除与绑定
    使用 Canvas 绘图
    表单脚本
    事件
    DOM2 和 DOM3
    DOM扩展
  • 原文地址:https://www.cnblogs.com/pqjwyn/p/5358534.html
Copyright © 2011-2022 走看看