1# 使用隐私模式 2<!--Kit: ArkWeb--> 3<!--Subsystem: Web--> 4<!--Owner: @aohui--> 5<!--Designer: @yaomingliu--> 6<!--Tester: @ghiker--> 7<!--Adviser: @HelloCrease--> 8 9 10开发者在创建Web组件时,可以将可选参数[incognitoMode](../reference/apis-arkweb/arkts-basic-components-web-i.md#weboptions)设置为true,来开启Web组件的隐私模式。当使用隐私模式时,浏览网页时的Cookie、Cache Data等数据不会保存在本地的持久化文件,当隐私模式的Web组件被销毁时,Cookie、Cache Data等数据将不被记录下来。 11 12- 创建隐私模式的[Web组件](../reference/apis-arkweb/arkts-basic-components-web.md)。 13 14 ```ts 15 // xxx.ets 16 import { webview } from '@kit.ArkWeb'; 17 18 @Entry 19 @Component 20 struct WebComponent { 21 controller: webview.WebviewController = new webview.WebviewController(); 22 23 build() { 24 Column() { 25 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 26 } 27 } 28 } 29 ``` 30 31- 通过[isIncognitoMode](../reference/apis-arkweb/arkts-apis-webview-WebviewController.md#isincognitomode11) 判断当前Web组件是否是隐私模式。 32 33 ```ts 34 // xxx.ets 35 import { webview } from '@kit.ArkWeb'; 36 import { BusinessError } from '@kit.BasicServicesKit'; 37 38 @Entry 39 @Component 40 struct WebComponent { 41 controller: webview.WebviewController = new webview.WebviewController(); 42 43 build() { 44 Column() { 45 Button('isIncognitoMode') 46 .onClick(() => { 47 try { 48 let result = this.controller.isIncognitoMode(); 49 console.log('isIncognitoMode' + result); 50 } catch (error) { 51 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 52 } 53 }) 54 Web({ src: 'www.example.com', controller: this.controller }) 55 } 56 } 57 } 58 ``` 59 60隐私模式提供了一系列接口,用于操作地理位置、Cookie以及Cache Data。 61 62- 通过[allowGeolocation](../reference/apis-arkweb/arkts-apis-webview-GeolocationPermissions.md#allowgeolocation)设置隐私模式下的Web组件允许指定来源使用地理位置。 63 64 ```ts 65 // xxx.ets 66 import { webview } from '@kit.ArkWeb'; 67 import { BusinessError } from '@kit.BasicServicesKit'; 68 69 @Entry 70 @Component 71 struct WebComponent { 72 controller: webview.WebviewController = new webview.WebviewController(); 73 origin: string = "file:///"; 74 75 build() { 76 Column() { 77 Button('allowGeolocation') 78 .onClick(() => { 79 try { 80 // allowGeolocation第二个参数表示隐私模式(true)或非隐私模式(false)下,允许指定来源使用地理位置。 81 webview.GeolocationPermissions.allowGeolocation(this.origin, true); 82 } catch (error) { 83 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 84 } 85 }) 86 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 87 } 88 } 89 } 90 ``` 91 92- 通过[deleteGeolocation](../reference/apis-arkweb/arkts-apis-webview-GeolocationPermissions.md#deletegeolocation)清除隐私模式下指定来源的地理位置权限状态。 93 94 ```ts 95 // xxx.ets 96 import { webview } from '@kit.ArkWeb'; 97 import { BusinessError } from '@kit.BasicServicesKit'; 98 99 @Entry 100 @Component 101 struct WebComponent { 102 controller: webview.WebviewController = new webview.WebviewController(); 103 origin: string = "file:///"; 104 105 build() { 106 Column() { 107 Button('deleteGeolocation') 108 .onClick(() => { 109 try { 110 // deleteGeolocation第二个参数表示隐私模式(true)或非隐私模式(false)下,清除指定来源的地理位置权限状态。 111 webview.GeolocationPermissions.deleteGeolocation(this.origin, true); 112 } catch (error) { 113 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 114 } 115 }) 116 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 117 } 118 } 119 } 120 ``` 121 122- 通过[getAccessibleGeolocation](../reference/apis-arkweb/arkts-apis-webview-GeolocationPermissions.md#getaccessiblegeolocation)以回调方式异步获取隐私模式下指定源的地理位置权限状态。 123 124 ```ts 125 // xxx.ets 126 import { webview } from '@kit.ArkWeb'; 127 import { BusinessError } from '@kit.BasicServicesKit'; 128 129 @Entry 130 @Component 131 struct WebComponent { 132 controller: webview.WebviewController = new webview.WebviewController(); 133 origin: string = "file:///"; 134 135 build() { 136 Column() { 137 Button('getAccessibleGeolocation') 138 .onClick(() => { 139 try { 140 // getAccessibleGeolocation第三个参数表示隐私模式(true)或非隐私模式(false)下,以回调方式异步获取指定源的地理位置权限状态。 141 webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => { 142 if (error) { 143 console.log('getAccessibleGeolocationAsync error: ' + JSON.stringify(error)); 144 return; 145 } 146 console.log('getAccessibleGeolocationAsync result: ' + result); 147 }, true); 148 } catch (error) { 149 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 150 } 151 }) 152 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 153 } 154 } 155 } 156 ``` 157 158- 通过[deleteAllData](../reference/apis-arkweb/arkts-apis-webview-WebStorage.md#deletealldata)清除隐私模式下Web SQL当前使用的所有存储。 159 160 ```ts 161 // xxx.ets 162 import { webview } from '@kit.ArkWeb'; 163 import { BusinessError } from '@kit.BasicServicesKit'; 164 165 @Entry 166 @Component 167 struct WebComponent { 168 controller: webview.WebviewController = new webview.WebviewController(); 169 170 build() { 171 Column() { 172 Button('deleteAllData') 173 .onClick(() => { 174 try { 175 // deleteAllData参数表示删除所有隐私模式(true)或非隐私模式(false)下,内存中的web数据。 176 webview.WebStorage.deleteAllData(true); 177 } catch (error) { 178 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 179 } 180 }) 181 Web({ src: $rawfile('index.html'), controller: this.controller, incognitoMode: true }) 182 .databaseAccess(true) 183 } 184 } 185 } 186 ``` 187 188 加载的html文件。 189 ```html 190 <!-- index.html --> 191 <!DOCTYPE html> 192 <html> 193 <head> 194 <meta charset="UTF-8"> 195 <title>test</title> 196 <script type="text/javascript"> 197 198 var db = openDatabase('mydb','1.0','Test DB',2 * 1024 * 1024); 199 var msg; 200 201 db.transaction(function(tx){ 202 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(1,"test1")'); 203 tx.executeSql('INSERT INTO LOGS (id,log) VALUES(2,"test2")'); 204 msg = '<p>数据表已创建,且插入了两条数据。</p>'; 205 206 document.querySelector('#status').innerHTML = msg; 207 }); 208 209 db.transaction(function(tx){ 210 tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { 211 var len = results.rows.length,i; 212 msg = "<p>查询记录条数:" + len + "</p>"; 213 214 document.querySelector('#status').innerHTML += msg; 215 216 for(i = 0; i < len; i++){ 217 msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; 218 219 document.querySelector('#status').innerHTML += msg; 220 } 221 },null); 222 }); 223 224 </script> 225 </head> 226 <body> 227 <div id="status" name="status">状态信息</div> 228 </body> 229 </html> 230 ``` 231 232- 通过[fetchCookieSync](../reference/apis-arkweb/arkts-apis-webview-WebCookieManager.md#fetchcookiesync11)获取隐私模式下指定url对应cookie的值。 233 234 ```ts 235 // xxx.ets 236 import { webview } from '@kit.ArkWeb'; 237 import { BusinessError } from '@kit.BasicServicesKit'; 238 239 @Entry 240 @Component 241 struct WebComponent { 242 controller: webview.WebviewController = new webview.WebviewController(); 243 244 build() { 245 Column() { 246 Button('fetchCookieSync') 247 .onClick(() => { 248 try { 249 // fetchCookieSync第二个参数表示获取隐私模式(true)或非隐私模式(false)下,webview的内存cookies。 250 let value = webview.WebCookieManager.fetchCookieSync('https://www.example.com', true); 251 console.log("fetchCookieSync cookie = " + value); 252 } catch (error) { 253 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 254 } 255 }) 256 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 257 } 258 } 259 } 260 ``` 261 262- 通过[configCookieSync](../reference/apis-arkweb/arkts-apis-webview-WebCookieManager.md#configcookiesync11)设置隐私模式下指定url的单个cookie的值。 263 264 ```ts 265 // xxx.ets 266 import { webview } from '@kit.ArkWeb'; 267 import { BusinessError } from '@kit.BasicServicesKit'; 268 269 @Entry 270 @Component 271 struct WebComponent { 272 controller: webview.WebviewController = new webview.WebviewController(); 273 274 build() { 275 Column() { 276 Button('configCookieSync') 277 .onClick(() => { 278 try { 279 // configCookieSync第三个参数表示获取隐私模式(true)或非隐私模式(false)下,对应url的cookies。 280 webview.WebCookieManager.configCookieSync('https://www.example.com', 'a=b', true); 281 } catch (error) { 282 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 283 } 284 }) 285 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 286 } 287 } 288 } 289 ``` 290 291- 通过[existCookie](../reference/apis-arkweb/arkts-apis-webview-WebCookieManager.md#existcookie)查询隐私模式下是否存在cookie。 292 293 ```ts 294 // xxx.ets 295 import { webview } from '@kit.ArkWeb'; 296 297 @Entry 298 @Component 299 struct WebComponent { 300 controller: webview.WebviewController = new webview.WebviewController(); 301 302 build() { 303 Column() { 304 Button('existCookie') 305 .onClick(() => { 306 // existCookie参数表示隐私模式(true)或非隐私模式(false)下,查询是否存在cookies。 307 let result = webview.WebCookieManager.existCookie(true); 308 console.log("result: " + result); 309 }) 310 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 311 } 312 } 313 } 314 ``` 315 316- 通过[clearAllCookiesSync](../reference/apis-arkweb/arkts-apis-webview-WebCookieManager.md#clearallcookiessync11)清除隐私模式下所有cookie。 317 318 ```ts 319 // xxx.ets 320 import { webview } from '@kit.ArkWeb'; 321 322 @Entry 323 @Component 324 struct WebComponent { 325 controller: webview.WebviewController = new webview.WebviewController(); 326 327 build() { 328 Column() { 329 Button('clearAllCookiesSync') 330 .onClick(() => { 331 // clearAllCookiesSync参数表示清除隐私模式(true)或非隐私模式(false)下,webview的所有内存cookies。 332 webview.WebCookieManager.clearAllCookiesSync(true); 333 }) 334 Web({ src: 'www.example.com', controller: this.controller, incognitoMode: true }) 335 } 336 } 337 } 338 ``` 339