首先由南昌網(wǎng)絡(luò)公司工程師介紹關(guān)于屏蔽彈出窗口的原因,曾經(jīng)有一段時(shí)間,廣告商在網(wǎng)上使用彈出窗口達(dá)到了肆無(wú)忌憚的程度。他們經(jīng)常把彈出窗口打扮成系統(tǒng)對(duì)話框的模樣,引誘用戶去點(diǎn)擊其中的廣告。由于看起來(lái)像是系統(tǒng)對(duì)話框,一般用戶很難分辨是真是假。為了解決這個(gè)問(wèn)題,有些瀏覽器開始在彈出窗口配置方面增加限制。
Windows XP SP2中的IE 6對(duì)彈出窗口施加了多方面的安全限制,包括不允許在屏幕之外創(chuàng)建彈出窗口、不允許將彈出窗口移動(dòng)到屏幕以外、不允許關(guān)閉狀態(tài)欄等。IE 7則增加了更多的安全限制,如不允許關(guān)閉地址欄、默認(rèn)情況下不允許移動(dòng)彈出窗口或調(diào)整其大小。Firefox 1從一開始就不支持修改狀態(tài)欄,因此無(wú)論給window.open()傳人什么樣的特性字符串,彈出窗口中都會(huì)無(wú)一例外地顯示狀態(tài)欄。后來(lái)的Firefox 3又強(qiáng)制始終在彈出窗口中顯示地址欄。Opera只會(huì)在主瀏覽器窗口中打開彈出窗口,但不允許它們出現(xiàn)在可能與系統(tǒng)對(duì)話框混淆的地方。
此外,有的瀏覽器只根據(jù)用戶操作來(lái)創(chuàng)建彈出窗口。這樣一來(lái),在頁(yè)面尚未加載完成時(shí)調(diào)用window.open()的語(yǔ)句根本不會(huì)執(zhí)行,而且還可能會(huì)將錯(cuò)誤消息顯示給用戶。換句話說(shuō),只能通過(guò)單擊或者擊鍵來(lái)打開彈出窗口。
對(duì)于那些不是用戶有意打開的彈出窗口,Chrome采取了不同的處理方式。它不會(huì)像其他瀏覽器那樣簡(jiǎn)單地屏蔽這些彈出窗口,而是只顯示它們的標(biāo)題欄,并把它們放在瀏覽器窗口的右下角。
在打開計(jì)算機(jī)硬盤中的網(wǎng)頁(yè)時(shí),IE會(huì)解除對(duì)彈出窗口的某些限制。但是在服務(wù)器上執(zhí)行這些代碼會(huì)受到對(duì)彈出窗口的限制。
彈出窗口屏蔽程序
大多數(shù)瀏覽器都內(nèi)置有彈出窗口屏蔽程序,而沒(méi)有內(nèi)置此類程序的瀏覽器,南昌網(wǎng)站設(shè)計(jì)公司技術(shù)員認(rèn)為,也可以安裝Yahoo!Toolbar等帶有內(nèi)置屏蔽程序的實(shí)用工具。結(jié)果就是用戶可以將絕大多數(shù)不想看到彈出窗口屏蔽掉。于是,在彈出窗口被屏蔽時(shí),就應(yīng)該考慮兩種可能性。如果是瀏覽器內(nèi)置的屏蔽程序阻止的彈出窗口,
那么window.open()很可能會(huì)返回null。此時(shí),只要檢測(cè)這個(gè)返回的值就可以確定彈出窗口是否被屏蔽了,如下面的例子所示:
var jxbhWin=window. open("http://www.gimmickmag.com","_blank");
if(jxbhWin==null)(
alert("The popup was blocked!");
)
如果是瀏覽器擴(kuò)展或其他程序阻止的彈出窗口,那么window.open()通常會(huì)拋出一個(gè)錯(cuò)誤。因此,要想準(zhǔn)確地檢測(cè)出彈出窗口是否被屏蔽,必須在檢測(cè)返回值的同時(shí),將對(duì)window.open()的調(diào)用封裝在一個(gè)try-catch塊中,如下所示:
var jxbhWin=window. open("http://www.gimmickmag.com","_blank");
if (jxbhWin==null)(
在任何情況下,以上代碼都可以檢測(cè)出調(diào)用window.open()打開的彈出窗口是不是被屏蔽了。但要注意的是,檢測(cè)彈出窗口是否被屏蔽只是一方面,它并不會(huì)阻止瀏覽器顯示與被屏蔽的彈出窗口有關(guān)的消息。
本文僅限內(nèi)部技術(shù)人員學(xué)習(xí)交流,不得作于其他商業(yè)用途.文章出自:南昌網(wǎng)站建設(shè)公司-百恒網(wǎng)絡(luò) http://www.gimmickmag.com 如轉(zhuǎn)載請(qǐng)注明出處!