浏览器阻止window.open的解决方案

之前在做项目的时候也遇到过浏览器会阻止window.open方法,一直没有找到解决方案,直到这一次在被这个问题所困扰后脑子里突然想起wordpress的后台在发布文章的时候有一个预览按钮,第二次点击的时候不是在新开窗口而是在上一次打开的窗口又刷新了一遍,后来研究了一下window.open的参数设置,发现需要给这个open窗口定义个名称两次打开的是同一个名称的话就会是刷新而不是在次新开窗口,有了这个重大发现,问题就迎刃而解了!

先分析一下浏览器为什么会阻止window.open吧:
用户主动去触发事件的浏览器不会阻止,什么是用户主动触发的呢?就是当用户去点击的一瞬间就弹出这种浏览器是不会阻止的,如果是通过setTimeout定时器延时弹出或者ajax异步处理回调后在open这种浏览器就会认为是恶意弹出就会立刻阻止。

解决办法:
利用之前的重大发现应该这样处理这类问题,当用户点击的时候如果需要在异步ajax回调后open的话应该把代码改成下面这种

function test(){
	$.ajax({
		url:'a.html',
		success: function(e){
			window.open(url)//被浏览器KO了
		}	
	})
}
function test(){
	var winpop=window.open('','pop');
	winpop.document.write('先占个座,去去就来!')
	$.ajax({
		url:'a.html',
		success: function(url){
			window.open(url,'pop')//成功弹出!
		}	
	})
}

2 Responses to “ 浏览器阻止window.open的解决方案 ”

  1. 月婵说道:

    顶下再看哈

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>