Home » 電腦技巧

防止 Hinet 空間的廣告彈出

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 標籤包起來的部份。

avoid_hinet_ad_1_1

所以,我們就可以把 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() 函式就能有效的防止這類的彈出式廣告:

檢視原始碼 JavaScript
1
2
3
4
5
6
<script type="text/javascript">
<!--
	// 覆寫window.open()變成無任何作用
	window.open = function(){};
//-->
</script>

這樣做的話,基本上廣告就無法開啟新網頁了,不過在 Hinet 的廣告語法中還加入的每秒會檢查廣告是否有被關閉,因此就有可能會出現 JavaScript 的錯誤:

avoid_hinet_ad_1_2

所以我們再把 window.open() 函式再改一下:

檢視原始碼 JavaScript
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() 函式的功能,我們就拿另一個新的物件來當做它的替代函式。

檢視原始碼 JavaScript
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()

檢視原始碼 JavaScript
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=)

4 筆針對 防止 Hinet 空間的廣告彈出 的迴響

      • 有 加入我的最愛 那個古典例子
        也有開或關視窗, 重新整理, 新視窗無功能列(網址列, 狀態列, 捲軸, 等等....), 個別按鍵發生不相同功能, 等等....
        可以 mailto 執行 Outlook
        以前還可以將個別新增 MSN 或 ICQ 帳號 (注: 以前未有 ICQweb 或 線上MSN的時候)
        除了開關視窗與特殊功能直接執行外, 其他都是從網頁中一鍵打開加入窗口
        真的無類似 window.external.Addcookie 那種 加入cookie 語法嗎?

        • 基本開關視窗是ok啦, 但其它你說的那些古老例子都是在 IE 時代才有的, 現在很多為了安全性就不一定有用了

發表迴響