大概有好久好久都沒有打理這裏了,剛朋友問我,如何防止 彈出框被 瀏覽器屏蔽,我突然想到了一個萬全之策。 html
通常來講,咱們會用 js 彈出窗口: window.open( url ); 這種方案基本被廢棄了,由於全部瀏覽器都會封殺這種寫法。 api
我要說的有兩種方案:
一、好比,咱們要彈出一個網頁:http://julying.com,那麼能夠 構造: 瀏覽器
<a id=」openWin」 href=」http://julying.com」></a>
而後寫腳本, 安全
JS寫法:
document.getElementById(‘openWin’).click();
jQuery寫法:
$(‘#openWin’).click(); 函數
但這個寫法是有問題的,他只能在 IE有做用,、非 IE瀏覽器 的 click() 是無效的,要專門正對非IE瀏覽器寫新的腳本,這跟麻煩。 測試
二、用 <form />
構建html: url
<form id=」openWin」 action=」http://julying.com」 target=」_blank」 method=」get」></form> spa
而後寫腳本, 插件
JS寫法:
document.getElementById(‘openWin’).submit();
jQuery寫法:
$(‘#openWin’).submit(); orm
這種方案,任何瀏覽器均可以執行,而且不會被任何瀏覽器以及插件屏蔽。
—- 王子墨 2010 年 3月
2012.5.2 日補充:
看到留言說,上面方法失效了。
剛纔測試了一下,上述方法,在 Firefox 4.0 版本以後已經失效了。Firefox 爲了阻止廣告,更加安全,禁止了腳本 自動 觸發 .submit() , .click() 事件。
也就是說,腳本不能 在用戶不觸發事件的時候,不能打開一個新窗口,就是說必須是是用戶主動觸發 <a /> 的 click() 事件,或者 主動觸發submit()事件。
因此:
<form id=」openWin」 action=」http://julying.com」 target=」_blank」 method=」get」></form> ,
document.getElementById(‘openWin’).submit();
仍是會被屏蔽。
就在我決定睡覺的時候,我突然想到這樣的方法:
$(document).click(function(){
$(‘#openWin’).submit();
});
測試之下,發現這樣是可行的!
在Firefox 11 ,Chrome 17 下測試經過。
可是 :
$(window).scroll(function(){
$(‘#openWin’).submit();
});
仍是會被屏蔽。
總結一下:
若是您須要在彈出新窗口一次,可用代碼:
<form id=」openWin」 action=」http://julying.com」 target=」_blank」 method=」get」></form>
$(document).one(‘click’,function(){
$(‘#openWin’).submit();
});
固然,也能夠:
<a id=」openWin」 href=」http://julying.com」 target=」_blank」></a>
$(document).one(‘click’,function(){
$(‘#openWin’).click();
});
.one()函數 是 jQuery 特有的函數,詳見:http://julying.com/jQuery-1.6-api/#p=one
即:當用戶點擊網頁任何一個地方,會彈出窗口一次。若是用戶不點擊,就不會彈出!
Firefox 限制真嚴格啊。
通過測試,只容許 click() 內部嵌套 .submit() 、click() 事件。
mousemove , mouseout , $(window).scroll() 這種類型的所有不容許。
夜好深了,個人思惟有點不清楚了,上面的文字感受寫的亂七八糟,湊和着看吧 ,這算拋磚引玉,能夠順着這個思路繼續走下去。 我得睡了,有問題,到QQ羣:jQuery 自習室 (羣號:7599526 ) 討論吧。