1# Class (WebStorage) 2<!--Kit: ArkWeb--> 3<!--Subsystem: Web--> 4<!--Owner: @yuzhouhang1--> 5<!--Designer: @handyohos--> 6<!--Tester: @ghiker--> 7<!--Adviser: @HelloCrease--> 8 9通过WebStorage可管理Web SQL数据库接口和HTML5 Web存储接口,每个应用中的所有Web组件共享一个WebStorage。 10 11> **说明:** 12> 13> - 本模块首批接口从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 14> 15> - 本Class首批接口从API version 9开始支持。 16> 17> - 示例效果请以真机运行为准,当前DevEco Studio预览器不支持。 18> 19> - 目前调用WebStorage下的方法,都需要先加载Web组件。 20 21## 导入模块 22 23```ts 24import { webview } from '@kit.ArkWeb'; 25``` 26 27## deleteOrigin 28 29static deleteOrigin(origin: string): void 30 31清除指定源所使用的存储。 32 33**系统能力:** SystemCapability.Web.Webview.Core 34 35**参数:** 36 37| 参数名 | 类型 | 必填 | 说明 | 38| ------ | ------ | ---- | ------------------------ | 39| origin | string | 是 | 指定源的字符串索引,来自于[getOrigins](#getorigins)。 | 40 41**错误码:** 42 43以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 44 45| 错误码ID | 错误信息 | 46| -------- | ------------------------------------------------------ | 47| 17100011 | Invalid origin. | 48| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 49 50**示例:** 51 52```ts 53// xxx.ets 54import { webview } from '@kit.ArkWeb'; 55import { BusinessError } from '@kit.BasicServicesKit'; 56 57@Entry 58@Component 59struct WebComponent { 60 controller: webview.WebviewController = new webview.WebviewController(); 61 origin: string = "resource://rawfile/"; 62 63 build() { 64 Column() { 65 Button('deleteOrigin') 66 .onClick(() => { 67 try { 68 webview.WebStorage.deleteOrigin(this.origin); 69 } catch (error) { 70 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 71 } 72 73 }) 74 Web({ src: $rawfile('index.html'), controller: this.controller }) 75 } 76 } 77} 78``` 79 80加载的html文件。 81 ```html 82 <!-- index.html --> 83 <!DOCTYPE html> 84 <html> 85 <head> 86 <meta charset="UTF-8"> 87 <title>test</title> 88 <script type="text/javascript"> 89 90 // 打开或创建数据库 91 var request = indexedDB.open('myDatabase', 1); 92 93 // 如果数据库版本变化或首次创建时触发 94 request.onupgradeneeded = function(event) { 95 var db = event.target.result; 96 97 // 创建对象存储(表),设置主键为‘id’ 98 var objectStore = db.createObjectStore('customers', { keyPath: 'id' }); 99 100 // 为‘name’创建索引 101 objectStore.createIndex('name', 'name', { unique: false }); 102 }; 103 104 // 打开数据库成功时的回调 105 request.onsuccess = function(event) { 106 var db = event.target.result; 107 108 const customerData = [ 109 {id: 1, name: 'John Doe', email: 'john@example.com'}, 110 {id: 2, name: 'John Doe', email: 'john@example.com'}, 111 ] 112 113 // 插入数据 114 var transaction = db.transaction('customers', 'readwrite'); 115 var objectStore = transaction.objectStore('customers'); 116 117 customerData.forEach((customer) => { 118 objectStore.add(customer); 119 }); 120 121 transaction.oncomplete = function () { 122 console.info('Transaction completed: data added'); 123 } 124 125 transaction.onerror = function (event) { 126 console.error("Transaction failed", event); 127 } 128 129 // 查询数据 130 var queryTransaction = db.transaction(['customers']); 131 var queryObjectStore = queryTransaction.objectStore('customers'); 132 var query = queryObjectStore.get(2); 133 134 query.onsuccess = function (event) { 135 console.info('query succ'); 136 console.info('Customer:', event.target.result); 137 console.info('Customer id:', event.target.result.id); 138 console.info('Customer name:', event.target.result.name); 139 console.info('Customer email:', event.target.result.email); 140 }; 141 142 queryObjectStore.openCursor().onsuccess = (event) => { 143 const cursor = event.target.result; 144 if (cursor) { 145 var msg = "<p>查询记录:" + cursor.key + "</p>"; 146 document.querySelector("#status").innerHTML += msg; 147 var msg = "<p><b>" + cursor.value.name + "</b></p>"; 148 document.querySelector("#status").innerHTML += msg; 149 console.info(`SSN ${cursor.key} 对应的名字是 ${cursor.value.name}`); 150 cursor.continue(); 151 } else { 152 console.info("没有更多记录了") 153 } 154 } 155 }; 156 157 // 错误处理 158 request.onerror = function(event) { 159 console.error('Database error:', event.target.error); 160 }; 161 162 </script> 163 </head> 164 <body> 165 <div id="status" name="status">状态信息</div> 166 </body> 167 </html> 168 ``` 169 170## getOrigins 171 172static getOrigins(callback: AsyncCallback\<Array\<WebStorageOrigin>>): void 173 174以回调方式异步获取当前使用Web SQL数据库的所有源的信息。 175 176**系统能力:** SystemCapability.Web.Webview.Core 177 178**参数:** 179 180| 参数名 | 类型 | 必填 | 说明 | 181| -------- | -------------------------------------- | ---- | ------------------------------------------------------ | 182| callback | AsyncCallback\<Array\<[WebStorageOrigin](./arkts-apis-webview-i.md#webstorageorigin)>> | 是 | 以数组方式返回源的信息。 | 183 184**错误码:** 185 186以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 187 188| 错误码ID | 错误信息 | 189| -------- | ------------------------------------------------------ | 190| 17100012 | Invalid web storage origin. | 191| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 192 193**示例:** 194 195```ts 196// xxx.ets 197import { webview } from '@kit.ArkWeb'; 198import { BusinessError } from '@kit.BasicServicesKit'; 199 200@Entry 201@Component 202struct WebComponent { 203 controller: webview.WebviewController = new webview.WebviewController(); 204 205 build() { 206 Column() { 207 Button('getOrigins') 208 .onClick(() => { 209 try { 210 webview.WebStorage.getOrigins((error, origins) => { 211 if (error) { 212 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 213 return; 214 } 215 for (let i = 0; i < origins.length; i++) { 216 console.info('origin: ' + origins[i].origin); 217 console.info('usage: ' + origins[i].usage); 218 console.info('quota: ' + origins[i].quota); 219 } 220 }) 221 } catch (error) { 222 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 223 } 224 225 }) 226 Web({ src: $rawfile('index.html'), controller: this.controller }) 227 } 228 } 229} 230``` 231 232加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 233 234## getOrigins 235 236static getOrigins(): Promise\<Array\<WebStorageOrigin>> 237 238以Promise方式异步获取当前使用Web SQL数据库的所有源的信息。 239 240**系统能力:** SystemCapability.Web.Webview.Core 241 242**返回值:** 243 244| 类型 | 说明 | 245| -------------------------------- | ------------------------------------------------------------ | 246| Promise\<Array\<[WebStorageOrigin](./arkts-apis-webview-i.md#webstorageorigin)>> | Promise实例,用于获取当前所有源的信息。 | 247 248**错误码:** 249 250以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 251 252| 错误码ID | 错误信息 | 253| -------- | ------------------------------------------------------ | 254| 17100012 | Invalid web storage origin. | 255| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 256 257**示例:** 258 259```ts 260// xxx.ets 261import { webview } from '@kit.ArkWeb'; 262import { BusinessError } from '@kit.BasicServicesKit'; 263 264@Entry 265@Component 266struct WebComponent { 267 controller: webview.WebviewController = new webview.WebviewController(); 268 269 build() { 270 Column() { 271 Button('getOrigins') 272 .onClick(() => { 273 try { 274 webview.WebStorage.getOrigins() 275 .then(origins => { 276 for (let i = 0; i < origins.length; i++) { 277 console.info('origin: ' + origins[i].origin); 278 console.info('usage: ' + origins[i].usage); 279 console.info('quota: ' + origins[i].quota); 280 } 281 }) 282 .catch((e: BusinessError) => { 283 console.error('error: ' + JSON.stringify(e)); 284 }) 285 } catch (error) { 286 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 287 } 288 289 }) 290 Web({ src: $rawfile('index.html'), controller: this.controller }) 291 } 292 } 293} 294``` 295 296加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 297 298## getOriginQuota 299 300static getOriginQuota(origin: string, callback: AsyncCallback\<number>): void 301 302使用callback回调异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 303 304**系统能力:** SystemCapability.Web.Webview.Core 305 306**参数:** 307 308| 参数名 | 类型 | 必填 | 说明 | 309| -------- | --------------------- | ---- | ------------------ | 310| origin | string | 是 | 指定源的字符串索引。 | 311| callback | AsyncCallback\<number> | 是 | 指定源的存储配额。<br>number是long型整数,范围为(-2,147,483,648)~(2,147,483,647)。 | 312 313**错误码:** 314 315以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 316 317| 错误码ID | 错误信息 | 318| -------- | ------------------------------------------------------ | 319| 17100011 | Invalid origin. | 320| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 321 322**示例:** 323 324```ts 325// xxx.ets 326import { webview } from '@kit.ArkWeb'; 327import { BusinessError } from '@kit.BasicServicesKit'; 328 329@Entry 330@Component 331struct WebComponent { 332 controller: webview.WebviewController = new webview.WebviewController(); 333 origin: string = "resource://rawfile/"; 334 335 build() { 336 Column() { 337 Button('getOriginQuota') 338 .onClick(() => { 339 try { 340 webview.WebStorage.getOriginQuota(this.origin, (error, quota) => { 341 if (error) { 342 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 343 return; 344 } 345 console.info('quota: ' + quota); 346 }) 347 } catch (error) { 348 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 349 } 350 351 }) 352 Web({ src: $rawfile('index.html'), controller: this.controller }) 353 } 354 } 355} 356``` 357 358加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 359 360## getOriginQuota 361 362static getOriginQuota(origin: string): Promise\<number> 363 364以Promise方式异步获取指定源的Web SQL数据库的存储配额,配额以字节为单位。 365 366**系统能力:** SystemCapability.Web.Webview.Core 367 368**参数:** 369 370| 参数名 | 类型 | 必填 | 说明 | 371| ------ | ------ | ---- | ------------------ | 372| origin | string | 是 | 指定源的字符串索引 | 373 374**返回值:** 375 376| 类型 | 说明 | 377| --------------- | --------------------------------------- | 378| Promise\<number> | Promise实例,用于获取指定源的存储配额。 | 379 380**错误码:** 381 382以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 383 384| 错误码ID | 错误信息 | 385| -------- | ------------------------------------------------------ | 386| 17100011 | Invalid origin. | 387| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 388 389**示例:** 390 391```ts 392// xxx.ets 393import { webview } from '@kit.ArkWeb'; 394import { BusinessError } from '@kit.BasicServicesKit'; 395 396@Entry 397@Component 398struct WebComponent { 399 controller: webview.WebviewController = new webview.WebviewController(); 400 origin: string = "resource://rawfile/"; 401 402 build() { 403 Column() { 404 Button('getOriginQuota') 405 .onClick(() => { 406 try { 407 webview.WebStorage.getOriginQuota(this.origin) 408 .then(quota => { 409 console.info('quota: ' + quota); 410 }) 411 .catch((e: BusinessError) => { 412 console.error('error: ' + JSON.stringify(e)); 413 }) 414 } catch (error) { 415 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 416 } 417 418 }) 419 Web({ src: $rawfile('index.html'), controller: this.controller }) 420 } 421 } 422} 423``` 424 425加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 426 427## getOriginUsage 428 429static getOriginUsage(origin: string, callback: AsyncCallback\<number>): void 430 431以回调方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 432 433**系统能力:** SystemCapability.Web.Webview.Core 434 435**参数:** 436 437| 参数名 | 类型 | 必填 | 说明 | 438| -------- | --------------------- | ---- | ------------------ | 439| origin | string | 是 | 指定源的字符串索引 | 440| callback | AsyncCallback\<number> | 是 | 指定源的存储量。 | 441 442**错误码:** 443 444以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 445 446| 错误码ID | 错误信息 | 447| -------- | ------------------------------------------------------ | 448| 17100011 | Invalid origin. | 449| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 450 451**示例:** 452 453```ts 454// xxx.ets 455import { webview } from '@kit.ArkWeb'; 456import { BusinessError } from '@kit.BasicServicesKit'; 457 458@Entry 459@Component 460struct WebComponent { 461 controller: webview.WebviewController = new webview.WebviewController(); 462 origin: string = "resource://rawfile/"; 463 464 build() { 465 Column() { 466 Button('getOriginUsage') 467 .onClick(() => { 468 try { 469 webview.WebStorage.getOriginUsage(this.origin, (error, usage) => { 470 if (error) { 471 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 472 return; 473 } 474 console.info('usage: ' + usage); 475 }) 476 } catch (error) { 477 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 478 } 479 480 }) 481 Web({ src: $rawfile('index.html'), controller: this.controller }) 482 } 483 } 484} 485``` 486 487加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 488 489## getOriginUsage 490 491static getOriginUsage(origin: string): Promise\<number> 492 493以Promise方式异步获取指定源的Web SQL数据库的存储量,存储量以字节为单位。 494 495**系统能力:** SystemCapability.Web.Webview.Core 496 497**参数:** 498 499| 参数名 | 类型 | 必填 | 说明 | 500| ------ | ------ | ---- | ------------------ | 501| origin | string | 是 | 指定源的字符串索引 | 502 503**返回值:** 504 505| 类型 | 说明 | 506| --------------- | ------------------------------------- | 507| Promise\<number> | Promise实例,用于获取指定源的存储量。 | 508 509**错误码:** 510 511以下错误码的详细介绍请参见[webview错误码](errorcode-webview.md)。 512 513| 错误码ID | 错误信息 | 514| -------- | ----------------------------------------------------- | 515| 17100011 | Invalid origin. | 516| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3.Parameter verification failed. | 517 518**示例:** 519 520```ts 521// xxx.ets 522import { webview } from '@kit.ArkWeb'; 523import { BusinessError } from '@kit.BasicServicesKit'; 524 525@Entry 526@Component 527struct WebComponent { 528 controller: webview.WebviewController = new webview.WebviewController(); 529 origin: string = "resource://rawfile/"; 530 531 build() { 532 Column() { 533 Button('getOriginUsage') 534 .onClick(() => { 535 try { 536 webview.WebStorage.getOriginUsage(this.origin) 537 .then(usage => { 538 console.info('usage: ' + usage); 539 }).catch((e: BusinessError) => { 540 console.error('error: ' + JSON.stringify(e)); 541 }) 542 } catch (error) { 543 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 544 } 545 }) 546 Web({ src: $rawfile('index.html'), controller: this.controller }) 547 } 548 } 549} 550``` 551 552加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下的html文件。 553 554## deleteAllData 555 556static deleteAllData(incognito?: boolean): void 557 558清除Web SQL数据库当前使用的所有存储。 559 560**系统能力:** SystemCapability.Web.Webview.Core 561 562**参数:** 563 564| 参数名 | 类型 | 必填 | 说明 | 565| ------ | ------ | ---- | ------------------ | 566| incognito<sup>11+</sup> | boolean | 否 | true表示删除所有隐私模式下内存中的web数据,false表示删除正常非隐私模式下Web的SQL数据库当前使用的所有存储。<br>默认值:false。<br>传入undefined与null时为false。 | 567 568**示例:** 569 570```ts 571// xxx.ets 572import { webview } from '@kit.ArkWeb'; 573import { BusinessError } from '@kit.BasicServicesKit'; 574 575@Entry 576@Component 577struct WebComponent { 578 controller: webview.WebviewController = new webview.WebviewController(); 579 580 build() { 581 Column() { 582 Button('deleteAllData') 583 .onClick(() => { 584 try { 585 webview.WebStorage.deleteAllData(); 586 } catch (error) { 587 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 588 } 589 }) 590 Web({ src: $rawfile('index.html'), controller: this.controller }) 591 } 592 } 593} 594``` 595 596加载的html文件,请参考[deleteOrigin](#deleteorigin)接口下加载的html文件。