1# 使用智能防跟踪功能
2
3
4Web组件支持智能防跟踪功能,即跟踪型网站作为三方插入别的网页时,其发送的网络请求禁止携带cookie。
5
6- 通过调用[enableIntelligentTrackingPrevention](../reference/apis-arkweb/js-apis-webview.md#enableintelligenttrackingprevention12)接口使能或者关闭相应Web组件的智能防跟踪功能,默认情况下该功能未启用。
7
8  ```ts
9  // xxx.ets
10  import { webview } from '@kit.ArkWeb';
11  import { BusinessError } from '@kit.BasicServicesKit';
12
13  @Entry
14  @Component
15  struct WebComponent {
16    controller: webview.WebviewController = new webview.WebviewController();
17
18    build() {
19      Column() {
20        Button('enableIntelligentTrackingPrevention')
21          .onClick(() => {
22            try {
23              this.controller.enableIntelligentTrackingPrevention(true);
24              console.log("enableIntelligentTrackingPrevention: true");
25            } catch (error) {
26              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
27            }
28          })
29        Web({ src: 'www.example.com', controller: this.controller })
30      }
31    }
32  }
33  ```
34
35- 通过调用[isIntelligentTrackingPreventionEnabled](../reference/apis-arkweb/js-apis-webview.md#isintelligenttrackingpreventionenabled12)接口判断当前Web组件是否开启了智能防跟踪功能。
36
37  ```ts
38  // xxx.ets
39  import { webview } from '@kit.ArkWeb';
40  import { BusinessError } from '@kit.BasicServicesKit';
41
42  @Entry
43  @Component
44  struct WebComponent {
45    controller: webview.WebviewController = new webview.WebviewController();
46
47    build() {
48      Column() {
49        Button('isIntelligentTrackingPreventionEnabled')
50          .onClick(() => {
51            try {
52              let result = this.controller.isIntelligentTrackingPreventionEnabled();
53              console.log("result: " + result);
54            } catch (error) {
55              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
56            }
57          })
58        Web({ src: 'www.example.com', controller: this.controller })
59      }
60    }
61  }
62  ```
63
64- 通过调用[onIntelligentTrackingPreventionResult](../reference/apis-arkweb/ts-basic-components-web.md#onintelligenttrackingpreventionresult12)接口,以回调的方式异步获取拦截的跟踪型网站的域名和访问的网站域名信息。
65
66  ```ts
67  // xxx.ets
68  import { webview } from '@kit.ArkWeb';
69  import { BusinessError } from '@kit.BasicServicesKit';
70
71  @Entry
72  @Component
73  struct WebComponent {
74    controller: webview.WebviewController = new webview.WebviewController();
75
76    build() {
77      Column() {
78        // 需要打开智能防跟踪功能,才会触发onIntelligentTrackingPreventionResult回调
79        Button('enableIntelligentTrackingPrevention')
80          .onClick(() => {
81            try {
82              this.controller.enableIntelligentTrackingPrevention(true);
83            } catch (error) {
84              console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
85            }
86          })
87        Web({ src: 'www.example.com', controller: this.controller })
88          .onIntelligentTrackingPreventionResult((details) => {
89            console.log("onIntelligentTrackingPreventionResult: [websiteHost]= " + details.host +
90              ", [trackerHost]=" + details.trackerHost);
91          })
92      }
93    }
94  }
95  ```
96
97同时,智能防跟踪功能提供了一组接口,用于设置需要绕过智能防跟踪功能的域名列表。这些接口设置的域名列表是整个应用生效,而非某个Web组件。
98
99- 通过调用[addIntelligentTrackingPreventionBypassingList](../reference/apis-arkweb/js-apis-webview.md#addintelligenttrackingpreventionbypassinglist12)接口设置需要绕过智能防跟踪功能的域名列表。
100
101  ```ts
102  // xxx.ets
103  import { webview } from '@kit.ArkWeb';
104  import { BusinessError } from '@kit.BasicServicesKit';
105
106  @Entry
107  @Component
108  struct WebComponent {
109    controller: webview.WebviewController = new webview.WebviewController();
110
111    build() {
112      Column() {
113        Button('addIntelligentTrackingPreventionBypassingList')
114          .onClick(() => {
115            try {
116              let hostList = ["www.test1.com", "www.test2.com", "www.test3.com"];
117              webview.WebviewController.addIntelligentTrackingPreventionBypassingList(hostList);
118            } catch (error) {
119              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
120            }
121          })
122        Web({ src: 'www.example.com', controller: this.controller })
123      }
124    }
125  }
126  ```
127
128- 通过调用[removeIntelligentTrackingPreventionBypassingList](../reference/apis-arkweb/js-apis-webview.md#removeintelligenttrackingpreventionbypassinglist12)接口移除通过[addIntelligentTrackingPreventionBypassingList](../reference/apis-arkweb/js-apis-webview.md#addintelligenttrackingpreventionbypassinglist12)接口设置的部分域名列表。
129
130  ```ts
131  // xxx.ets
132  import { webview } from '@kit.ArkWeb';
133  import { BusinessError } from '@kit.BasicServicesKit';
134
135  @Entry
136  @Component
137  struct WebComponent {
138    controller: webview.WebviewController = new webview.WebviewController();
139
140    build() {
141      Column() {
142        Button('removeIntelligentTrackingPreventionBypassingList')
143          .onClick(() => {
144            try {
145              let hostList = [ "www.test1.com", "www.test2.com" ];
146              webview.WebviewController.removeIntelligentTrackingPreventionBypassingList(hostList);
147            } catch (error) {
148              console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
149            }
150          })
151        Web({ src: 'www.example.com', controller: this.controller })
152      }
153    }
154  }
155  ```
156
157- 通过调用[clearIntelligentTrackingPreventionBypassingList](../reference/apis-arkweb/js-apis-webview.md#clearintelligenttrackingpreventionbypassinglist12)接口清除通过[addIntelligentTrackingPreventionBypassingList](../reference/apis-arkweb/js-apis-webview.md#addintelligenttrackingpreventionbypassinglist12)接口设置的所有域名。
158
159  ```ts
160  // xxx.ets
161  import { webview } from '@kit.ArkWeb';
162
163  @Entry
164  @Component
165  struct WebComponent {
166    controller: webview.WebviewController = new webview.WebviewController();
167
168    build() {
169      Column() {
170        Button('clearIntelligentTrackingPreventionBypassingList')
171          .onClick(() => {
172            webview.WebviewController.clearIntelligentTrackingPreventionBypassingList();
173          })
174        Web({ src: 'www.example.com', controller: this.controller })
175      }
176    }
177  }
178  ```
179