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 |