javascript弹出窗口小结


弹出窗口已经被小广告弄得声名狼藉,虽然如此,但是有的时候还是需要用弹出窗口和原来的窗口分开来,比如说显示一个问卷调查。

最基本的就是使用window.open函数,搭配对于弹出窗口的属性作为输入参数。

第一个问题是许多浏览器都有popup blocker,从脚本直接运行window.open会被拦截,大部分用户会看不见你做的窗口。而且safari根本不允许脚本直接执行window.open,一定要通过用户的行为才能触发,对策是我们可以添加click event listener和 keypress event listener到document,这样只要用户和页面有交互就能激发window.open,而且可以绕过popup blocker。

如果需求是希望在关闭某个页面的时候弹出窗口,可以使用onunload事件,大部分浏览器都支持,唯独IE9不支持在onunload中执行window.open

如果你想让弹出的窗口发到主窗口后面,可以使用blur:

win2=window.open(popunder,"yini",winfeatures);
		if(win2 && win2.blur){
			win2.blur();
		}
		window.focus()
可惜firefox不支持
Firefox其实可以的!!!!
if(jQuery.browser.mozilla){
				win2.init = function(e) {
			        with (e) {
			            (function() {
			                if (typeof window.mozPaintCount != 'undefined') {
			                    var x = window.open('about:blank');
								if(x){
			                    	x.close();
								}
			                }
			                try { opener.window.focus(); }
			                catch (err) { }
			            })();
			        }
			    };
				win2.init(win2);
			}

如果你想先弹出一个窗口,然后当主窗口跳转到另一个页面的时候控制弹出的窗口,可以使用相同的名字调用 window.open('example.html' , 'same_name');,但是在有些浏览器中这是行不通的,这时我们可以用cookie来控制:

弹出窗口:

<script>

	function get_cookie(Name) {
	  var search = Name + "="
	  var returnvalue = "";
	  if (document.cookie.length > 0) {
	    offset = document.cookie.indexOf(search)
	    if (offset != -1) { // if cookie exists
	      offset += search.length
	      // set index of beginning of value
	      end = document.cookie.indexOf(";", offset);
	      // set index of end of cookie value
	      if (end == -1)
	         end = document.cookie.length;
	      returnvalue=unescape(document.cookie.substring(offset, end))
	      }
	   }
	  return returnvalue;
	}


	function checkCookie(){
//		console.info(get_cookie('popunder'));
		if (get_cookie('popunder')=='yes'){
			
			window.close();
		}
	}
	
	function startInterval(){
		setInterval(checkCookie,1000);
	}
	</script>
</head>
<body οnlοad="startInterval();">

    跳转窗口:

<script>

	document.cookie="popunder=yes";
	
	</script>

最后提一下如果你怕弹出窗口被block掉,可以使用 window.showmodaldialog,这个缺陷就是类似alert,用户只有关闭modal之后才能控制主窗口。
参看:http://josephj.com/entry.php?id=367&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+josephj+%28%3F%3F%3F%3F%3F%3F%3F%29&utm_content=Google+Reader

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值