------ 文章開始 ------

 作者  knight00931 (讀書人的氣質)                              看板  Browsers 
 標題  [-Fx-] 簡介Adblock Plus(二):阻擋規則                                   
 時間  Tue Jul  6 08:04:30 2010                                               
───────────────────────────────────────

資料來源:
http://adblockplus.org/en/faq
http://adblockplus.org/en/documentation
http://code.google.com/p/adblock-chinalist/w/list
老實說發第一篇的時候沒有仔細規劃就變那樣了,真是抱歉,趕快把重點拉回來。

Q: 有什麼東西可以幫助我撰寫規則?

請按下Ctrl+Shift+V,你可以找到網頁中所有可阻擋的項目。按下各種標籤可以按你
需要的方式排列,而搜尋框不僅可以搜尋網址,也可輸入「圖片」,「程式碼」等等來過
濾特定類型(如圖http://bit.ly/bjynDT ),若介面為英文則可用image/object/frame
等相對應的字串。
另外就是Firebug,這套件的強大我想大家都有目共睹,不管是研究網頁中的框架或是撰
寫隱藏規則都相當有幫助,誰說一定要開發網頁才會受益呢?

Q:開始撰寫之前還需要知道什麼?不能右鍵選阻擋然後點一點就好了嗎?

當看到網頁上一大堆廣告時,首先要找出它如何輸出,然後找出源頭加以阻擋,這樣才是
最有效率的。當然也是有很陽春的塞廣告方式啦,有興趣的話可以去中國新浪看看...XD
然而"絕大部分"的廣告來源都有其規律,比如說都放在某些目錄底下,或者都是插入廣告
聯盟的廣告,這種都不難解決,找出網址的關聯性後就可一網打盡。

Q:那我要怎麼快速判斷廣告是如何出現的?

我不知道其他人的第一步是做什麼,我的話習慣先寫下$script,subdocument,畢竟要呼
叫外部廣告也就這兩種可能,寫好後重新整理看看結果如何。通常有兩種情況:
1.如果廣告不在,打開 Ctrl+Shift+V看看哪些被$script,subdocument擋住了,再來請觀
察網址,如果是來自第三方的網域,而你又不知道這網站是做啥的請愛用Google,它很可
能是廣告聯盟或者某些入口網站的廣告程式碼或頁框。如果都是自己的網域且擋住的都是
頁框,那就單獨打開那些頁框看他葫蘆裡賣的是什麼藥了,有用才放過,廣告的話就請擋
掉吧。
如果擋住的是一堆程式碼,就只好請你辛苦一點看看裡面究竟寫了什麼。有些網站會將廣
告和網站功能寫在一起,沒辦法直接擋程式碼(洪*我就是在說你),只能退而求其次去阻
擋他所呼叫的廣告。
2.如果廣告還在,那表示他將廣告寫在原始碼裡面,按下Ctrl+U,通常就可以順利搜尋
到廣告的部份。

Q:可是我又不曉得那些廣告的網址是什麼,怎麼搜尋?

還記得Firebug嗎?只要在廣告圖片或者頁框等等的地方按下右鍵選"觀察元素"就一目了然
了;當然在flash廣告上就沒辦法按右鍵,不過一樣可以在Ctrl+Shift+V中搜尋swf來確定
位置。最後整理出規則就行了。

Q: 這樣不會擋到其他東西嗎?

很可惜的,就是有可能。俗話說「不要看到ad就開槍」不是沒有道理的,有些東西能擋,
有些東西不能擋,也許你逛了幾頁發現寫好的規則不會造成誤擋,但在其他地方就又不一
定了。於是阻擋類型和白名單的配合就顯得很重要。
好比http://example.com/upload/底下的圖片全是廣告,但有些必要的程式碼也放在裡
面,一併阻擋會造成網頁顯示錯誤或某些功能無法使用,這時阻擋類型就可以派上用場。
所以為了速度,為了愛,讓我們一起學習阻擋類型吧!

Q:好吧,那阻擋類型怎麼用?你說說看啊你說說看

要指定阻擋類型只要在網址後方加上 $阻擋類型 即可。如果要指定多種類型,請以逗點
","區隔。
以下僅列出常用的類型,其他有興趣的可以到http://adblockplus.org/en/filters慢慢
研究囉。
script:程式碼,只對<script src=.... type="text/javascript"></script>這種呼叫js
的才有用,寫在原始碼裡的無法阻擋。

image:顧名思義,就是圖片。

background:背景,通常由CSS指定。

object: 指flash或者java等物件。

object_subrequest:子物件請求,常見於某些影片廣告。

subdocument:框架,用於<iframe src=...></iframe>所呼叫的網頁。

stylesheet:外部呼叫的CSS。

elemhide:1.2版以上才支援的功能,使隱藏規則不在該頁面生效。僅適用於例外規則,像
是@@||example.com^$elemhide。
(某些網站會觸發ABP的隱藏規則偵測 ABP,並阻止訪客瀏覽。elemhide即為此而生,詳
https://adblockplus.org/forum/viewtopic.php?t=5421 )

domain:網域限制,限定規則只在指定的網域生效。例如想在example.com阻擋來自
facebook.com的東西,就可寫下||facebook.com^$domain=example.com若要指定多個網域,可用管線符號(|)來分開,例如
facebook.com^$domain=example.com|example.net
$domain需要注意的是,指定的域名也會作用在他的子網域上,比如
facebook.com^$domain=example.com同樣會作用在a.example.com,b.example.com。

third-party:來自第三方網站的請求,多用於廣告聯盟(blogad,google ads)等等。

match-case:大小寫完全符合才會阻擋,例如/Advertisement/*$match-case則不會阻擋
example.com/advertisement/,老實說不常遇到...

反向阻擋類型:
一般當我們寫下||example.com^$image表示阻擋example.com底下所有的圖片
而反向類型的寫法則是||example.com^$~image,表示"example.com底下除了圖片全部阻
擋",就只是把上面那些阻擋規則的用法給反過來,常用於很多種東西要擋又不能全擋的情
況下,避免$image,object,subdocument,...這樣寫到天荒地老。
值得一提的是,domain的反向規則為$domain=~example.com而非$~domain=example.com

Q:這麼多誰記的起來?

也沒有要你背起來嘛,當你需要用的時候翻翻官網,或者你還記得這篇的時候就可以加減
用啦。

我想看到這裡應該都昏的差不多了,有興趣寫寫看的捧由可以小試身手,下面要擋的都只有
一兩樣,請記得停用訂閱清單。
http://www.gamer.com.tw/
http://zh.now.in/about
http://libertytimes.com.tw

Q:前面提到管線符號,這東西還有什麼用?
管線符號的用處很多,當你想要阻擋
http://example.com/banner.gif
https://example.com/banner.gif
http://www.example.com/banner.gif 這三個東西時可以在該網域的開頭前面加上兩個管
線符號(||) 變成 ||exapmple.com/banner.gif,這可以確保不會擋到
badexample.com/banner.gif或者
http://gooddomain.example/analyze?http://example.com/banner.gif
加上雙管線符號的規則同樣會作用在他的子網域,就像上面的www.example.com/banner.gif

值得注意的是,雙管線符號也能用於子網域上,如||e.example.com^不會阻擋
image.example.com,可有效避免誤擋。

同時管線符號也可以限制網址的開頭與結束,如果你想阻擋所有的flash,單純寫下"swf"
是很危險的,他會一併阻擋example.com/swf/index.html,此時改寫成"swf|" 就只會阻
擋以swf結尾的網址,如example.com/123.swf而不會阻擋example.com/swf/index.html或
者example.com/123.swf?type=ads
如果要限制開頭,應寫成|http://或|https://而非網域名稱。

Q:前面常看到的^符號是什麼?

說到^就要先提到分隔字元(separator character),如果你想阻擋http://example.com/
http://example.com:8000/而不阻擋http://example.com.ar/,^就可以用來作為一個
分隔字元的佔位符號(placeholder)。
於是你可以寫成http://example.com^
分隔字元可以是英文字母數字- . %以外的任意字元,網址的最後一個字也可以作為
分隔字元(即便他是前面說的那些字母或數字等等)
舉個例子,紅色的部份就代表分隔字元:
http://example.com:8000/foo.bar?a=12&b=%D1%82%D0%B5%D1%81%D1%82

所以這條網址可以被^example.com^^foo.bar^^%D1%82%D0%B5%D1%81%D1%82^給阻擋。


以下可以直接跳過...

Q:為什麼ABP顯示某個條件是慢速規則?

有三種可能:
一是你使用了正規表達式。如果只是想阻擋/google-analyticator/這種資料夾,卻被當
成正規表達式,可以在頭或尾加上一個星號,頭尾都加也是可以啦,不過這只會顯示出你
吃飽太閒XD
二是未滿8個字元,這就只能請你想盡辦法補齊啦。
三是shortcut被佔用了。

Q:shortcut是什麼?被佔用是什麼意思?

說來話長(真的很長,取前面一段),真的有興趣再去http://goo.gl/JBlo慢慢研究吧。
(shortcut不曉得翻什麼好,捷徑好像也怪怪的,就先不翻了)

在你過濾列表中的每一條規則都會被轉換成正規表達式,即便你當初並不是這樣寫的。好
比說你寫了一條ad*banner.gif|,ABP會在內部將他轉換成/ad.*banner.gif$/這種正規
表達式。當ABP收到一條網址時不會去慢慢的比對過濾列表中的規則,這只會無謂的拖慢
瀏覽速度。
在ABP將規則轉換成正規表達式時會嘗試摘錄規則中的一些資訊,它需要由8個連續的字元
所組成,獨一無二的字串,而這字串就是shortcut,他們存在於被過濾規則匹配的網址中
(網址長度並沒有限制,只是在這裡8個字比較合理)。舉個例子,如果你寫了一條
|http://ad.*,則ABP會在http://a,ttp://ad和tp://ad.中做選擇,其中任何一個字串
都會存在於所匹配的網址。
而包含了萬用字元(*)的連續8個字元的字串及正規表達式都沒辦法被建立一個shortcut。

至於被佔用掉是什麼意思?就取ChinaList和EasyList其中的規則來說明:
ChinaList中有一條/counter.,而EasyList中有一條/counter.php?chcounter_mode=
/counter.這條的shortcut只有兩種,也就是/countercounter.,然而
/counter.php?chcounter_mode=卻有很多種,即便/counter和counter.這兩條被用掉還可以
  →→→
向後比對成ounter.p等等。
但是當你把EasyList擺在ChinaList前面,也就是/counter.php?chcounter_mode=會被排
列在/counter.之前,ChinaLst中/counter.的shortcut就被佔用了,解決方法很簡單,
將ChinaList擺在EasyList前方即可。
任何發生這種狀況的規則都可用重新排列來解決。

Q:那我可以用正規表達式嗎?

可以,請參考http://adblockplus.org/en/faq_internal#filters
但效率會比普通規則來的低,根據上述網址,作者表示即使用20條普通規則來取代一條正規
表達式,都是值得的。
當然你對正規表達式實在很有興趣的話可以參考Writing a Regular Expression Pattern
https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions

p.s.在意隱私的推薦訂閱EasyPrivacy,他會過濾掉大多數的統計腳本、計數器。
http://tinyurl.com/24ppscs這種常見的1x1圖片等等,ChinaList也有相關補充。
p.s.2白名單就不另外提了,用法和一般規則相同,只需要在開頭加上@@即可。
下一篇是隱藏規則,前提一樣是要生的出來或者P幣再度敗光XD

ABP並非萬能,很多時候靠油猴子才能完美的解決,如果碰到比較麻煩的也歡迎一起討論。
--
教授不要一直講一些五四三的啦!  教授                  Q 教授 二一。      
         學生  五四三的啦!        ?[30;40m?[37;42m 國際經濟的探討  S        ?[30;40m?[41m?[32m?[1;37;42m國際經濟的
              ◥?[30;40m? 五四三的啦!                 W        =+ 沒錯就是你 
                (哈欠)             ?[33;42m?[37m                E      ?[30;40m?[32m  被二一的  
              ?[33;40m?[m              ◢██                 E██   就是你   
██                                        T          ?[32;42m妝~克˙泡爾

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.107.144
uoyihc:未看先推 XD                                              07/06 08:36
ACGB:推!  裡面的觀念技巧ad muncher也會用到                      07/06 08:57
kocw:推!                                                       07/06 10:21
abccbaandy:我覺得要練規則去洪X練最好XD                          07/06 10:27
DCaty:推!                                                      07/06 11:13
knives:早餐店的廣告多到可以拿來練功了XD                         07/06 11:45
早餐店用油猴子才是對的 Orz
Holocaust123:推                                                 07/06 12:34
Holocaust123:建議在短網址後頭加註,並在文末附上的長網址,以免   07/06 12:37
Holocaust123:有天短網址失效就不知道原先網址了                   07/06 12:38
tingyang:專業推                                                 07/06 12:48
knight00931:有人贊助我300P 可是我信刪太快了XD 希望不要賭輸      07/06 17:16
q0212908:好專業 但看不懂                                        07/06 17:45
q0212908:我只會用快捷鍵來阻擋                                   07/06 17:45
※ 編輯: knight00931     來自: 114.32.107.144       (07/06 21:32)


------ 文章結尾 ------

[複製網址] [開新視窗] [加到我的最愛] [檢舉短網址] [QR條碼]



服務條款 - 完全手冊 - 加入會員(免費) - 聯絡偶們 -

© PPT.cc