Hinet 的 ADSL用戶可以申請 Hinet 所提供的 100MB 網頁空間,雖然蠻多人都用來放檔案分享,不過還是有少數人是用來放自己的網頁的。但是,如果是網頁的話(html或htm),開啟網頁時會有彈出式的廣告出來。
網頁有這種彈出式的廣告是蠻討厭的,因此就有人會想盡各種辦法來防止廣告的出現。在說怎樣防止 Hinet 廣告之前先說個標籤的用法。
noscript 標籤,這組標籤是用來給不支援 JavaScript 的瀏覽器用的,當瀏覽器不支援或是沒啟用 JavaScript 時,就會看到 noscript 標籤中的內容。
因此若是輸入下列的語法時:
1 2 3 4 5 6 7 8 9 | <body> 這邊會被看到~<br /> <noscript> 這邊會看不到!!<br /> </noscript> 這邊會被看到~<br /> </body> |
在支援或啟用 JavaScript 的瀏覽器中就只能看到沒用 noscript 標籤包起來的部份。
所以,我們就可以把 noscrip 標籤拿來運用在擋各種廣告的用途上!
大多數的廣告語法都是附加在網頁的最後面,因此我們可以直接在網頁的後面加上 noscript 標籤,但是要注意的是,若是直接加入了整個 noscript 是無效的,因為廣告語法是在這 noscript 標籤外
1 2 | <noscript></noscript> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
因此就不要關閉 noscript 標籤,把 noscript 後面全部都當做是不要的部份,這樣才能有效的防止廣告的語法。
1 2 | <noscript> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
可是這招流傳太久了,現在 Hinet 學聰明了,既然大家都用 noscript 標籤來防它,它就在它廣告語法前面先多加一個 noscript 標籤來關閉這個標籤,因此~廣告又會再度的彈出來啦!(大寫的就是 Hinet 加的)
1 2 | <noscript></NOSCRIPT> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
雖然還是有其它標籤可以用來防掉 Hinet 等的廣告語法,例如:xml 標籤、comment 標籤或是其它有同等效果的標籤,不過 FireFox 瀏覽器是不支援的。
1 2 | <comment> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
1 2 | <xml> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
不過難保 Hinet 那天會把它們一一的關閉起來,所以這邊要用個比較能治本的方法!
彈出式的廣告視窗大多是用 window.open() 函式,因此我們只要覆寫 window.open() 函式就能有效的防止這類的彈出式廣告:
1 2 3 4 5 6 | <script type="text/javascript"> <!-- // 覆寫window.open()變成無任何作用 window.open = function(){}; //--> </script> |
這樣做的話,基本上廣告就無法開啟新網頁了,不過在 Hinet 的廣告語法中還加入的每秒會檢查廣告是否有被關閉,因此就有可能會出現 JavaScript 的錯誤:
所以我們再把 window.open() 函式再改一下:
1 2 3 4 5 6 | <script type="text/javascript"> <!-- // 覆寫window.open()變成傳回window本身 window.open = function(){return window;}; //--> </script> |
讓用 window.open() 函式時會順便回傳 window 本身,這樣 window 本身也是網頁,要做任何檢查都不會產生錯誤。
但當其它地方有需要用到 window.open() 函式來開新視窗時,會發現到都已經沒有任何作用了,這下代誌大條了!
因為 window.open() 函式已經被我們覆寫了,所以也就失去原有的功能,這邊為了要保有 window.open() 函式的功能,我們就拿另一個新的物件來當做它的替代函式。
1 2 3 4 5 6 7 8 | <script type="text/javascript"> <!-- // 先用Open物件來替代window.open() var Open = window.open; // 覆寫window.open()變成回傳window本身 window.open = function(){return window;}; //--> </script> |
這邊我用了一個 Open 物件來替代 window.open() 函式,所以使用 Open() 就等同於使用 window.open() 函式。要注意的是,JavaScript 是區分大小寫的,所以 Open() 不等於 open() 唷!
因此,若原本自己網頁中有用到 window.open() 函式的地方都要改成用 Open()。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <script type="text/javascript"> <!-- // 先用Open物件來替代window.open() var Open = window.open; // 覆寫window.open()變成回傳window本身 window.open = function(){return window;}; // 按下按鈕後所呼叫用 function goURL(){ // 使用替代window.open()函式的Open物件 Open("http://abgne.tw, "", ""); } //--> </script> <body> <button onclick="goURL();" id="btn">前往「男丁格爾's 脫殼玩」</button> </body> |
另外還有一種比較 Hack 的方法是先破壞掉網頁最後面語法的正確性,讓網頁的最後面因語法的不正確而無法執行其它廣告語法,只要在網頁的最後面加上<script type=就可以了:
1 2 | <script type=</NOSCRIPT> <script language = "JavaScript" SRC="http://hiad.myweb.hinet.net/myweb_popAD.js"></script> |
這樣<script type=後面的部份就會無任何動作,這方法在FireFox也有效。
綜合以上的幾種方法,各位可以找最方面、最簡單使用的方法來做。若不管其它瀏覽器的支援度的話,可以選用 xml 標籤或是 comment 標籤;若是要都適用的話,可以用<script type=的方式,當然最好是覆寫 window.open() 函式。
範例瀏覽:
http://abgne.myweb.hinet.net/Teacher/0010/0010_1.html(使用comment標籤)
http://abgne.myweb.hinet.net/Teacher/0010/0010_2.html(使用xml標籤)
http://abgne.myweb.hinet.net/Teacher/0010/0010_3.html(覆寫 window.open() 函式)
http://abgne.myweb.hinet.net/Teacher/0010/0010_4.html(使用<script type=)
http://hiad.myweb.hinet.net/myweb_popAD.js 這個就是廣告碼
有方法可以在網頁載入時自動將 http://hiad.myweb.hinet.net 加入瀏覽器拒絕Cookie名單嗎?
我發現大部份廣告碼只要cookie被拒絕就無法顯示
不是防毒軟體之類的阻擋廣告程序
只是瀏覽器本身內置的cookie拒絕功能而已
如果 JavaSccript 能控制瀏覽器的設定的話, 這不是很危險又可怕嗎XD
有 加入我的最愛 那個古典例子
也有開或關視窗, 重新整理, 新視窗無功能列(網址列, 狀態列, 捲軸, 等等....), 個別按鍵發生不相同功能, 等等....
可以 mailto 執行 Outlook
以前還可以將個別新增 MSN 或 ICQ 帳號 (注: 以前未有 ICQweb 或 線上MSN的時候)
除了開關視窗與特殊功能直接執行外, 其他都是從網頁中一鍵打開加入窗口
真的無類似 window.external.Addcookie 那種 加入cookie 語法嗎?
基本開關視窗是ok啦, 但其它你說的那些古老例子都是在 IE 時代才有的, 現在很多為了安全性就不一定有用了