Left: | ||
Right: |
OLD | NEW |
---|---|
1 libadblockplus | 1 libadblockplus |
2 ============== | 2 ============== |
3 | 3 |
4 A C++ library offering the core functionality of Adblock Plus. | 4 A C++ library offering the core functionality of Adblock Plus. |
5 | 5 |
6 libadblockplus is still work in progress, at an early stage. | 6 libadblockplus is still work in progress, at an early stage. |
7 | 7 |
8 Building | 8 Building |
9 -------- | 9 -------- |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... | |
37 | 37 |
38 * Execute `createsolution.bat` to generate project files, this will create | 38 * Execute `createsolution.bat` to generate project files, this will create |
39 `build\ia32\libadblockplus.sln` (solution for the 32 bit build) and | 39 `build\ia32\libadblockplus.sln` (solution for the 32 bit build) and |
40 `build\x64\libadblockplus.sln` (solution for the 64 bit build). Unfortunately, | 40 `build\x64\libadblockplus.sln` (solution for the 64 bit build). Unfortunately, |
41 V8 doesn't support creating both from the same project files. | 41 V8 doesn't support creating both from the same project files. |
42 * Open `build\ia32\libadblockplus.sln` or `build\x64\libadblockplus.sln` in | 42 * Open `build\ia32\libadblockplus.sln` or `build\x64\libadblockplus.sln` in |
43 Visual Studio and build the solution there. Alternatively you can use the | 43 Visual Studio and build the solution there. Alternatively you can use the |
44 `msbuild` command line tool, e.g. run `msbuild /m build\ia32\libadblockplus.sln` | 44 `msbuild` command line tool, e.g. run `msbuild /m build\ia32\libadblockplus.sln` |
45 from the Visual Studio Developer Command Prompt to create a 32 bit debug build. | 45 from the Visual Studio Developer Command Prompt to create a 32 bit debug build. |
46 | 46 |
47 Usage | |
48 ----- | |
49 | |
50 You can use libadblockplus to build an ad blocker. Or, strictly speaking, a web | |
51 content filter. Just like Adblock Plus, it can detect resources that should be | |
52 blocked based on their URL and context information, and generate CSS selectors | |
53 to hide DOM elements. | |
54 | |
55 The basic usage is explained below, see the | |
56 [API documentation](https://adblockplus.org/docs/libadblockplus) for more | |
57 information. See the [filter documentation](https://adblockplus.org/en/filters) | |
58 to learn more about Adblock Plus filters. | |
59 | |
60 ### Initialising the engine | |
61 | |
62 All the types and functions in libadblockplus are in the `AdblockPlus` | |
63 namespace. For brevity's sake, we'll assume the following `using` declaration: | |
64 | |
65 using namespace AdblockPlus; | |
66 | |
67 Most of the functionality of libadblockplus is available via the | |
68 [`FilterEngine`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_ 1_1_filter_engine.html) | |
69 class. Since libadblockplus uses the Adblock Plus core code under the hood, you | |
70 first need to create a | |
71 [`JsEngine`](https://adblockplus.org/docs/libadblockplus/class_adblock_plus_1_1_ js_engine.html) | |
72 instance and pass some information about your | |
73 application to it. | |
74 | |
75 AppInfo appInfo; | |
76 appInfo.name = "awesomewebfilter"; | |
77 appInfo.version = "0.1"; | |
78 appInfo.locale = "en-US"; | |
79 JsEngine jsEngine(appInfo); | |
80 | |
81 `JsEngine` needs to store files, make web requests and write log messages. This | |
82 works out of the box because it is using | |
Wladimir Palant
2014/09/02 13:27:34
"This somewhat works" :)
Or just insert "normally
Felix Dahlke
2014/09/02 13:30:01
Done.
| |
83 [`DefaultFileSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_ plus_1_1_default_file_system.html), | |
84 [`DefaultWebRequest`](https://adblockplus.org/docs/libadblockplus/class_adblock_ plus_1_1_default_web_request.html) | |
85 and | |
86 [`DefaultLogSystem`](https://adblockplus.org/docs/libadblockplus/class_adblock_p lus_1_1_default_log_system.html) | |
87 by default. | |
88 | |
89 Depending on your application and platform, you might want to supply your own | |
90 implementations for these - see | |
91 [`FilterEngine::SetFileSystem`](https://adblockplus.org/docs/libadblockplus/clas s_adblock_plus_1_1_js_engine.html#a979e9bde78499dab9f5e3aacc5155f40), | |
92 [`FilterEngine::SetWebRequest`](https://adblockplus.org/docs/libadblockplus/clas s_adblock_plus_1_1_js_engine.html#a290a03b86137a56d7b2f457f03c77504) | |
93 and | |
94 [`FilterEngine::SetLogSystem`](https://adblockplus.org/docs/libadblockplus/class _adblock_plus_1_1_js_engine.html#ab60b10be1d4500bce4b17c1e9dbaf4c8) | |
95 respectively. | |
96 | |
97 With the `JsEngine` instance created, you can create a `FilterEngine` instance: | |
98 | |
99 FilterEngine filterEngine(jsEngine); | |
100 | |
101 When initialised, `FilterEngine` will automatically select a suitable ad | |
102 blocking subscription based on `AppInfo::locale` and download the filters for | |
103 it. | |
104 | |
105 ### Managing subscriptions | |
106 | |
107 libadblockplus takes care of storing and updating subscriptions. | |
108 | |
109 You can add more: | |
110 | |
111 SubscriptionPtr subscription = | |
112 filterEngine.GetSubscription("https://example.org/filters.txt"); | |
113 subscription->AddToList(); | |
114 | |
115 Retrieving an existing subscription works the same way, use | |
116 [`Subscription::IsListed`](https://adblockplus.org/docs/libadblockplus/class_adb lock_plus_1_1_subscription.html#a42da64bdc0cb7ee65a27a001db0307c8) | |
117 to check if the subscription has been added or not. | |
118 | |
119 SubscriptionPtr subscription = | |
120 filterEngine.GetSubscription("https://example.org/filters.txt"); | |
121 if (subscription->IsListed()) | |
122 .... | |
123 | |
124 Removing a subscription is not rocket science either: | |
125 | |
126 subscription->RemoveFromList(); | |
127 | |
128 You can also get a list of all subscriptions that were added: | |
129 | |
130 std::vector<SubscriptionPtr> subscriptions = | |
131 filterEngine.GetListedSubscriptions(); | |
132 | |
133 ### Managing custom filters | |
134 | |
135 Working with custom filters is very similar to working with subscriptions: | |
136 | |
137 FilterPtr filter = filterEngine.GetFilter("||example.com/ad.png"); | |
138 filter->AddToList(); | |
139 filter->RemoveFromList(); | |
140 | |
141 Note that applications should only do this to manage a user's custom filters. In | |
142 general, filter lists should be hosted somewhere and added as a subscription. | |
143 | |
144 ### Matching blocking filters | |
145 | |
146 As mentioned above, one of the two main tasks of libadblockplus is to check if | |
147 a URL matches any of the active blocking filters. | |
148 | |
149 To demonstrate this, we'll add a custom filter: | |
150 | |
151 FilterPtr filter = filterEngine.GetFilter("||example.com/ad.png"); | |
152 filter->AddToList(); | |
153 | |
154 Now we'll call matches on an URL that should be blocked: | |
155 | |
156 FilterPtr match = | |
157 filterEngine.Matches("http://example.com/ad.png", "DOCUMENT", ""); | |
158 | |
159 Since we've added a matching filter, `match` will point to the same filter | |
160 object as `filter`. | |
161 | |
162 Note that we've ignored the third parameter of | |
163 [`FilterEngine::Matches`](https://adblockplus.org/docs/libadblockplus/class_adbl ock_plus_1_1_filter_engine.html#a184211d324bfb6e23c5e09fae2d12f91) | |
164 here to keep things simple. Real applications should pass the frame structure | |
165 in here - this is necessary because many filters and exception rules are domain | |
166 specific. | |
167 | |
168 ### Generating CSS from element hiding filters | |
169 | |
170 Aside from blocking requests, ad blockers typically also hide elements. This is | |
171 done via a second type of filter that is completely ignored when matching URLs: | |
172 [element hiding rules](https://adblockplus.org/en/filters#elemhide). | |
173 | |
174 You can retrieve a list of all CSS selectors for elements that should be hidden | |
175 using | |
176 [`FilterEngine::GetElementHidingSelectors`](https://adblockplus.org/docs/libadbl ockplus/class_adblock_plus_1_1_filter_engine.html#a91c44dac13c7655230be49440f45a 168). | |
177 | |
178 What libadblockplus clients typically do with this is to generate a CSS style | |
179 sheet that is injected into each page. | |
180 | |
47 Shell | 181 Shell |
48 ----- | 182 ----- |
49 | 183 |
50 The _shell_ subdirectory contains an example application using libadblockplus. | 184 The _shell_ subdirectory contains an example application using libadblockplus. |
51 | 185 |
52 It's a simple shell that loads subscriptions into memory and checks | 186 It's a simple shell that loads subscriptions into memory and checks |
53 whether a specified resource would be blocked or not. | 187 whether a specified resource would be blocked or not. |
54 | 188 |
55 To see the available commands, type `help`. | 189 To see the available commands, type `help`. |
56 | 190 |
57 ### Unix | 191 ### Unix |
58 | 192 |
59 The shell is automatically built by `make`, you can run it as follows: | 193 The shell is automatically built by `make`, you can run it as follows: |
60 | 194 |
61 build/out/abpshell | 195 build/out/abpshell |
62 | 196 |
63 ### Windows | 197 ### Windows |
64 | 198 |
65 Just run the project *abpshell*. | 199 Just run the project *abpshell*. |
OLD | NEW |