看板 Browsers 關於我們 聯絡資訊
資料來源: 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 教授 二一。 學生 五四三的啦! 國際經濟的探討 S 國際經濟的 ◥◥ 五四三的啦! W =+ 沒錯就是你 (哈欠) E 被二一的 ██ E██ 就是你 ██ T 居克˙泡爾 -- ※ 發信站: 批踢踢實業坊(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) ※ 編輯: knight00931 來自: 59.126.29.105 (04/08 09:57)