| OLD | NEW |
| 1 { | 1 { |
| 2 "title": { | 2 "title": { |
| 3 "message": "FAQ - Adblock Plus 內部實作" | 3 "message": "FAQ - Adblock Plus 內部實作" |
| 4 }, | 4 }, |
| 5 "s1": { | 5 "s1": { |
| 6 "message": "哪裡有全部 Adblock Plus 偏好設定值的用途?" | 6 "message": "哪裡有全部 Adblock Plus 偏好設定值的用途?" |
| 7 }, | 7 }, |
| 8 "s2": { | 8 "s2": { |
| 9 "message": "Adblock Plus 有許多可經由" | 9 "message": "Adblock Plus 有許多可經由 <a>about:config</a> 存取的偏好設定。它們都是以" |
| 10 }, | 10 }, |
| 11 "s3": { | 11 "s3": { |
| 12 "message": "http://kb.mozillazine.org/About:config" | 12 "message": "extensions.adblockplus." |
| 13 }, | 13 }, |
| 14 "s4": { | 14 "s4": { |
| 15 "message": "about:config" | 15 "message": "開頭的 (與 Adblock 及 Adblock Plus 0.5 以" |
| 16 }, | 16 }, |
| 17 "s5": { | 17 "s5": { |
| 18 "message": "存取的偏好設定。它們都是以" | 18 "message": "adblock." |
| 19 }, | 19 }, |
| 20 "s6": { | 20 "s6": { |
| 21 "message": "extensions.adblockplus." | 21 "message": "開頭不同)。完整的說明列表可以在 <a>這裡</a> 取得。" |
| 22 }, | 22 }, |
| 23 "s7": { | 23 "s7": { |
| 24 "message": "開頭的 (與 Adblock 及 Adblock Plus 0.5 以" | 24 "message": "我要怎麼從自己的擴充套件存取 Adblock Plus?" |
| 25 }, | 25 }, |
| 26 "s8": { | 26 "s8": { |
| 27 "message": "adblock." | 27 "message": "要讓其他擴充套件整合 Adblock Plus,可使用" |
| 28 }, | 28 }, |
| 29 "s9": { | 29 "s9": { |
| 30 "message": "開頭不同)。完整的說明列表可以在 <a>這裡</a> 取得。" | 30 "message": "IAdblockPlus" |
| 31 }, | 31 }, |
| 32 "s10": { | 32 "s10": { |
| 33 "message": "我要怎麼從自己的擴充套件存取 Adblock Plus?" | 33 "message": "介面。詳細情形請參閱 <a>介面文件</a>。" |
| 34 }, | 34 }, |
| 35 "s11": { | 35 "s11": { |
| 36 "message": "要讓其他擴充套件整合 Adblock Plus,可使用" | 36 "message": "Adblock Plus 是如何過濾網址的?" |
| 37 }, | 37 }, |
| 38 "s12": { | 38 "s12": { |
| 39 "message": "IAdblockPlus" | 39 "message": "其實最關鍵的部份是由 Gecko,也就是 Firefox,Thunderbird 及其他應用程式的最底層引擎完成的。它包含一種稱
之為「內容策略」(content policy) 的機制。內容策略簡單地說就是一個 JavaScript (或 C++) 物件,每當瀏覽器需要載入某些東西時就會
呼叫。它會觀察網址及其他資料來決定是否允許載入。有許多內容策略是內建的 (當您在 Firefox 或者 SeaMonkey 中定義哪些網站的圖片不該載入時,您也
就設定了其中一個內容策略),所有套件也都可以註冊一個自己專用的。所以 Adblock Plus 要做的也就是註冊一個自己的內容策略,剩下的就是建立應用程式邏輯來
決定哪些網址應該阻擋,並提供使用者界面來設定過濾條件。" |
| 40 }, | 40 }, |
| 41 "s13": { | 41 "s13": { |
| 42 "message": "介面。詳細情形請參閱 <a>介面文件</a>。" | 42 "message": "給開發者: 要註冊一個內容策略,您必須 <a>撰寫一個 XPCOM 元件</a> 並實作 <a>nsIContentPolicy
介面</a>。請確保您有調整模組中的 registerSelf 方法來註冊您在 \"content-policy\" 類別中的元件 (利用 <a>catego
ry manager</a> 來實作)。現在您元件裡頭的 shouldLoad 方法將被呼叫,且您可以決定是否該接受指定的請求。" |
| 43 }, | 43 }, |
| 44 "s14": { | 44 "s14": { |
| 45 "message": "Adblock Plus 是如何過濾網址的?" | 45 "message": "Adblock Plus 如何處理它的過濾條件,以及哪種過濾條件更快?" |
| 46 }, | 46 }, |
| 47 "s15": { | 47 "s15": { |
| 48 "message": "其實最關鍵的部份是由 Gecko,也就是 Firefox,Thunderbird 及其他應用程式的最底層引擎完成的。它包含一種稱
之為「內容策略」(content policy) 的機制。內容策略簡單地說就是一個 JavaScript (或 C++) 物件,每當瀏覽器需要載入某些東西時就會
呼叫。它會觀察網址及其他資料來決定是否允許載入。有許多內容策略是內建的 (當您在 Firefox 或者 SeaMonkey 中定義哪些網站的圖片不該載入時,您也
就設定了其中一個內容策略),所有套件也都可以註冊一個自己專用的。所以 Adblock Plus 要做的也就是註冊一個自己的內容策略,剩下的就是建立應用程式邏輯來
決定哪些網址應該阻擋,並提供使用者界面來設定過濾條件。" | 48 "message": "所有的過濾條件都會在內部轉換成 <a>正規表示法</a>,即使不屬於這類寫法的條件也是。舉個例子,此條件" |
| 49 }, | 49 }, |
| 50 "s16": { | 50 "s16": { |
| 51 "message": "給開發者: 要註冊一個內容策略,您必須" | 51 "message": "ad*banner.gif|" |
| 52 }, | 52 }, |
| 53 "s17": { | 53 "s17": { |
| 54 "message": "http://developer.mozilla.org/cn/docs/How_to_Build_an_XPCOM_Compo
nent_in_Javascript" | 54 "message": "將被轉換成正規表示法" |
| 55 }, | 55 }, |
| 56 "s18": { | 56 "s18": { |
| 57 "message": "撰寫一個 XPCOM 元件" | 57 "message": "/ad.*banner\\.gif$/" |
| 58 }, | 58 }, |
| 59 "s19": { | 59 "s19": { |
| 60 "message": "並實作" | 60 "message": "。然而給予 Adblock Plus 一個網址時,它會針對所有的過濾條件進行檢查,一條接一條地檢查可不是簡單的工作 -- 這會不
必要地拖慢瀏覽速度。" |
| 61 }, | 61 }, |
| 62 "s20": { | 62 "s20": { |
| 63 "message": "http://www.xulplanet.com/references/xpcomref/ifaces/nsIContentPo
licy.html" | 63 "message": "除了將過濾條件轉換成正規表示法之外,Adblock Plus 也會嘗試從中摘錄出一些文字訊息。它需要一個唯一的,八個字元的字串
(這稱為一個「捷徑」,shortcut),當某網址符合過濾條件時,該字串會被呈遞出來 (其字串長度是隨意的,只是八個字元最合理)。舉個例子,若您有一條過濾條件" |
| 64 }, | 64 }, |
| 65 "s21": { | 65 "s21": { |
| 66 "message": "nsIContentPolicy 介面" | 66 "message": "|http://ad.*" |
| 67 }, | 67 }, |
| 68 "s22": { | 68 "s22": { |
| 69 "message": "。請確保您有調整模組中的 registerSelf 方法來註冊您在 \"content-policy\" 類別中的元件 (利用" | 69 "message": ",則 Adblock Plus 會選擇 \"http://a\",\"ttp://ad\" 及 \"tp://ad.\" 其中之
一,這些字串中的任何一個都將在網址符合過濾條件時被呈遞。可惜的是,目前無法為包含星號的八個字元或正規表示法找出捷徑。" |
| 70 }, | 70 }, |
| 71 "s23": { | 71 "s23": { |
| 72 "message": "http://www.xulplanet.com/references/xpcomref/ifaces/nsICategoryM
anager.html" | 72 "message": "所有的捷徑都會被推入一個搜尋表中,Adblock Plus 會經由各自的捷徑快速搜尋到相對應的過濾條件。當某個特定的網址需要檢驗
時,Adblock Plus 會先在表中搜尋已知的捷徑 (這個動作非常快,所需時間幾乎與捷徑多寡無關)。只有在找到捷徑時,才針對這個字串進行相對應的正規表示法檢
驗。然而,沒有捷徑的過濾條件仍需要一條接一條地檢查,這是相當緩慢的。" |
| 73 }, | 73 }, |
| 74 "s24": { | 74 "s24": { |
| 75 "message": "category manager" | 75 "message": "結論:使用哪一種過濾條件更快呢?您應該盡可能地少用正規表示法,它們一直都很龜速。然後盡量使用至少八個不間斷字元的簡單條件 (這表
示裡頭不能包含像是 * 的特殊字元),否則它們會和正規表示法一樣慢。不過只要是符合簡單條件的規則,不論多寡,處理的速度都是一樣的。這表示您即使拿 20 條簡單條
件來取代一條正規表示法都是值得的。說到這裡 -- 推薦使用 <a>將正規表示法轉換成一般規則</a> 這個網頁工具。" |
| 76 }, | 76 }, |
| 77 "s25": { | 77 "s25": { |
| 78 "message": "來實作)。現在您元件裡頭的 shouldLoad 方法將被呼叫,且您可以決定是否該接受指定的請求。" | 78 "message": "配對過濾條件的演算法細節" |
| 79 }, | 79 }, |
| 80 "s26": { | 80 "s26": { |
| 81 "message": "Adblock Plus 如何處理它的過濾條件,以及哪種過濾條件更快?" | 81 "message": "元素隱藏功能是如何實作的?" |
| 82 }, | 82 }, |
| 83 "s27": { | 83 "s27": { |
| 84 "message": "所有的過濾條件都會在內部轉換成 <a>正規表示法</a>,即使不屬於這類寫法的條件也是。舉個例子,此條件" | 84 "message": "元素隱藏規則會被翻譯成 <a>CSS</a> 並套用到所有使用者造訪的網頁。一條像是" |
| 85 }, | 85 }, |
| 86 "s28": { | 86 "s28": { |
| 87 "message": "ad*banner.gif|" | 87 "message": "example.com#div(evil_ad)" |
| 88 }, | 88 }, |
| 89 "s29": { | 89 "s29": { |
| 90 "message": "將被轉換成正規表示法" | 90 "message": "的規則看起來就等同:" |
| 91 }, | 91 }, |
| 92 "s30": { | 92 "s30": { |
| 93 "message": "/ad.*banner\\.gif$/" | 93 "message": "@-moz-document 是一個 CSS 標準的延伸,您可以在 <a>Mozilla Developer Center</a
> 閱讀更多相關細節。" |
| 94 }, | 94 }, |
| 95 "s31": { | 95 "s31": { |
| 96 "message": "。然而給予 Adblock Plus 一個網址時,它會針對所有的過濾條件進行檢查,一條接一條地檢查可不是簡單的工作 -- 這會不
必要地拖慢瀏覽速度。" | 96 "message": "那些沒有限制特定網域的規則將會被設定在 http:// 及 https:// 協定下以防它們不小心隱藏瀏覽器的界面 (chrom
e:// 格式)。舉個例子,條件" |
| 97 }, | 97 }, |
| 98 "s32": { | 98 "s32": { |
| 99 "message": "除了將過濾條件轉換成正規表示法之外,Adblock Plus 也會嘗試從中摘錄出一些文字訊息。它需要一個唯一的,八個字元的字串
(這稱為一個「捷徑」,shortcut),當某網址符合過濾條件時,該字串會被呈遞出來 (其字串長度是隨意的,只是八個字元最合理)。舉個例子,若您有一條過濾條件" | 99 "message": "#div(evil_ad)" |
| 100 }, | 100 }, |
| 101 "s33": { | 101 "s33": { |
| 102 "message": "|http://ad.*" | 102 "message": "將被翻譯為:" |
| 103 }, | 103 }, |
| 104 "s34": { | 104 "s34": { |
| 105 "message": ",則 Adblock Plus 會選擇 \"http://a\",\"ttp://ad\" 及 \"tp://ad.\" 其中之
一,這些字串中的任何一個都將在網址符合過濾條件時被呈遞。可惜的是,目前無法為包含星號的八個字元或正規表示法找出捷徑。" | 105 "message": "給開發者:Adblock Plus 使用這裡的 <a>樣式服務</a>。此介面自 Gecko 1.8 起允許擴充套件動態加入使用
者樣式表 (以前只能修改 userContent.css 並需要重新啟動瀏覽器)。使用者樣式表將複寫所有網站的 CSS 程式碼,它們擁有最高的 <a>優先權</
a>。" |
| 106 }, | 106 }, |
| 107 "s35": { | 107 "s35": { |
| 108 "message": "所有的捷徑都會被推入一個搜尋表中,Adblock Plus 會經由各自的捷徑快速搜尋到相對應的過濾條件。當某個特定的網址需要檢驗
時,Adblock Plus 會先在表中搜尋已知的捷徑 (這個動作非常快,所需時間幾乎與捷徑多寡無關)。只有在找到捷徑時,才針對這個字串進行相對應的正規表示法檢
驗。然而,沒有捷徑的過濾條件仍需要一條接一條地檢查,這是相當緩慢的。" | 108 "message": "過濾條件集檔案的第一行會是什麼樣子?" |
| 109 }, | 109 }, |
| 110 "s36": { | 110 "s36": { |
| 111 "message": "結論:使用哪一種過濾條件更快呢?您應該盡可能地少用正規表示法,它們一直都很龜速。然後盡量使用至少八個不間斷字元的簡單條件 (這表
示裡頭不能包含像是 * 的特殊字元),否則它們會和正規表示法一樣慢。不過只要是符合簡單條件的規則,不論多寡,處理的速度都是一樣的。這表示您即使拿 20 條簡單條
件來取代一條正規表示法都是值得的。說到這裡 -- 推薦使用 <a>將正規表示法轉換成一般規則</a> 這個網頁工具。" | 111 "message": "通常條件集的第一行都是簡單的" |
| 112 }, | 112 }, |
| 113 "s37": { | 113 "s37": { |
| 114 "message": "配對過濾條件的演算法細節" | 114 "message": "[Adblock]" |
| 115 }, | 115 }, |
| 116 "s38": { | 116 "s38": { |
| 117 "message": "元素隱藏功能是如何實作的?" | 117 "message": "。然而您也許已經注意到最近版本的 Adblock Plus 有時會替換成不同文字。這是因為您的列表中有些條件需要使用新版 Adb
lock Plus 才支援的進階語法,而不被原本的 Adblock 支援。像下面這個例子:" |
| 118 }, | 118 }, |
| 119 "s39": { | 119 "s39": { |
| 120 "message": "元素隱藏規則會被翻譯成" | 120 "message": "這只是一個簡單的註解。Adblock (或 Adblock Plus) 將忽略實際標記前的內容。這裡的需求版本不是強制性的,因為
Adblock Plus 0.6.1.2 也還不支援它。不過,如果您使用更新的過濾條件語法,您也許會需要改成:" |
| 121 }, | 121 }, |
| 122 "s40": { | 122 "s40": { |
| 123 "message": "http://www.w3.org/TR/CSS21/" | 123 "message": "這種標頭的類型從 Adblock Plus 0.7.1 開始支援。較舊的 Adblock Plus 及 Adblock 版本無法
開啟這種標頭的檔案。至於目前的版本,會先檢查標頭的版本編號並與本身的版本比較。如果檔案需要更新的 Adblock Plus,則使用者會收到一個要求更新的訊息。過
濾條件集仍會載入這些新版 Adblock Plus 才能正常使用的檔案,不過會在偏好設定視窗中顯示警告訊息。" |
| 124 }, | 124 }, |
| 125 "s41": { | 125 "s41": { |
| 126 "message": "CSS" | 126 "message": "最後,如果你只想要求使用 Adblock Plus 而不想指定版本,您可以在檔案開頭寫上" |
| 127 }, | 127 }, |
| 128 "s42": { | 128 "s42": { |
| 129 "message": "並套用到所有使用者造訪的網頁。一條像是" | 129 "message": "[Adblock Plus]" |
| 130 }, | 130 }, |
| 131 "s43": { | 131 "s43": { |
| 132 "message": "example.com#div(evil_ad)" | |
| 133 }, | |
| 134 "s44": { | |
| 135 "message": "的規則看起來就等同:" | |
| 136 }, | |
| 137 "s45": { | |
| 138 "message": "@-moz-document domain(example.com)\n{\n div#evil_ad, div.evil_a
d\n {\n display: none !important;\n }\n}" | |
| 139 }, | |
| 140 "s46": { | |
| 141 "message": "@-moz-document 是一個 CSS 標準的延伸,您可以在" | |
| 142 }, | |
| 143 "s47": { | |
| 144 "message": "https://developer.mozilla.org/en/CSS/@-moz-document" | |
| 145 }, | |
| 146 "s48": { | |
| 147 "message": "Mozilla Developer Center" | |
| 148 }, | |
| 149 "s49": { | |
| 150 "message": "閱讀更多相關細節。" | |
| 151 }, | |
| 152 "s50": { | |
| 153 "message": "那些沒有限制特定網域的規則將會被設定在 http:// 及 https:// 協定下以防它們不小心隱藏瀏覽器的界面 (chrom
e:// 格式)。舉個例子,條件" | |
| 154 }, | |
| 155 "s51": { | |
| 156 "message": "#div(evil_ad)" | |
| 157 }, | |
| 158 "s52": { | |
| 159 "message": "將被翻譯為:" | |
| 160 }, | |
| 161 "s53": { | |
| 162 "message": "@-moz-document url-prefix(http://),url-prefix(https://)\n{\n di
v#evil_ad, div.evil_ad\n {\n display: none !important;\n }\n}" | |
| 163 }, | |
| 164 "s54": { | |
| 165 "message": "給開發者:Adblock Plus 使用這裡的" | |
| 166 }, | |
| 167 "s55": { | |
| 168 "message": "https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsISt
yleSheetService" | |
| 169 }, | |
| 170 "s56": { | |
| 171 "message": "樣式服務" | |
| 172 }, | |
| 173 "s57": { | |
| 174 "message": "。此介面自 Gecko 1.8 起允許擴充套件動態加入使用者樣式表 (以前只能修改 userContent.css 並需要重新啟
動瀏覽器)。使用者樣式表將複寫所有網站的 CSS 程式碼,它們擁有最高的" | |
| 175 }, | |
| 176 "s58": { | |
| 177 "message": "http://www.w3.org/TR/CSS21/cascade.html#cascading-order" | |
| 178 }, | |
| 179 "s59": { | |
| 180 "message": "優先權" | |
| 181 }, | |
| 182 "s60": { | |
| 183 "message": "。" | |
| 184 }, | |
| 185 "s61": { | |
| 186 "message": "過濾條件集檔案的第一行會是什麼樣子?" | |
| 187 }, | |
| 188 "s62": { | |
| 189 "message": "通常條件集的第一行都是簡單的" | |
| 190 }, | |
| 191 "s63": { | |
| 192 "message": "[Adblock]" | |
| 193 }, | |
| 194 "s64": { | |
| 195 "message": "。然而您也許已經注意到最近版本的 Adblock Plus 有時會替換成不同文字。這是因為您的列表中有些條件需要使用新版 Adb
lock Plus 才支援的進階語法,而不被原本的 Adblock 支援。像下面這個例子:" | |
| 196 }, | |
| 197 "s65": { | |
| 198 "message": "(Adblock Plus 0.6.1.2 or higher required) [Adblock]" | |
| 199 }, | |
| 200 "s66": { | |
| 201 "message": "這只是一個簡單的註解。Adblock (或 Adblock Plus) 將忽略實際標記前的內容。這裡的需求版本不是強制性的,因為
Adblock Plus 0.6.1.2 也還不支援它。不過,如果您使用更新的過濾條件語法,您也許會需要改成:" | |
| 202 }, | |
| 203 "s67": { | |
| 204 "message": "[Adblock Plus 0.7.1]" | |
| 205 }, | |
| 206 "s68": { | |
| 207 "message": "這種標頭的類型從 Adblock Plus 0.7.1 開始支援。較舊的 Adblock Plus 及 Adblock 版本無法
開啟這種標頭的檔案。至於目前的版本,會先檢查標頭的版本編號並與本身的版本比較。如果檔案需要更新的 Adblock Plus,則使用者會收到一個要求更新的訊息。過
濾條件集仍會載入這些新版 Adblock Plus 才能正常使用的檔案,不過會在偏好設定視窗中顯示警告訊息。" | |
| 208 }, | |
| 209 "s69": { | |
| 210 "message": "最後,如果你只想要求使用 Adblock Plus 而不想指定版本,您可以在檔案開頭寫上" | |
| 211 }, | |
| 212 "s70": { | |
| 213 "message": "[Adblock Plus]" | |
| 214 }, | |
| 215 "s71": { | |
| 216 "message": "。當然這個檔案只會被 Adblock Plus 0.7.1 及更高版本接受。" | 132 "message": "。當然這個檔案只會被 Adblock Plus 0.7.1 及更高版本接受。" |
| 217 } | 133 } |
| 218 } | 134 } |
| OLD | NEW |