码迷,mamicode.com
首页 > Windows程序 > 详细

开不了的窗_____window.open

时间:2016-04-06 15:23:12      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

   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提交的方式进行跳转,同样未实践,不加评论。只是拿出来给大家一种提醒。

         

开不了的窗_____window.open

标签:

原文地址:http://www.cnblogs.com/pqjwyn/p/5358534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!