1# web子系统ChangeLog 2 3OpenHarmony 4.0.7.3 版本相较于OpenHarmony 之前的版本,web的API变更如下。 4 5## cl.web.1 setResponseData接口参数新增 6 7**变更影响** 8 9setResponseData(data: string | number | Resource),新增入参类型`Resource` 10 11在应用hap不解压场景,应用hap中的文件路径已不存在。当需要读取hap包内资源时,通过使用入参`data:Resource`替代`data:number`,实现对本应用下的资源访问。 12 13 14**关键的接口/组件变更** 15 16- 涉及接口 17 18 setResponseData 19 20- 变更前: 21 22 ```ts 23 setResponseData(data: string | number) 24 ``` 25 26- 变更后: 27 28 ```ts 29 setResponseData(data: string | number | Resource) 30 ``` 31 32**适配指导** 33 34应用hap解压时,打开并持有资源文件fd,最后通过`setResponseData(data:number)`将资源响应数据传递给内核。 35 36```ts 37// xxx.ets 38import web_webview from '@ohos.web.webview' 39import fileio from '@ohos.fileio'; 40 41@Entry 42@Component 43struct WebComponent { 44 controller: web_webview.WebviewController = new web_webview.WebviewController() 45 responseweb: WebResourceResponse = new WebResourceResponse() 46 heads: Header[] = new Array() 47 48 build() { 49 Column() { 50 Web({ src: 'www.example.com', controller: this.controller }) 51 .onInterceptRequest((event) => { 52 console.log('url:' + event.request.getRequestUrl()) 53 var head1:Header = { 54 headerKey:"Connection", 55 headerValue:"keep-alive" 56 } 57 var head2:Header = { 58 headerKey:"Cache-Control", 59 headerValue:"no-cache" 60 } 61 var length = this.heads.push(head1) 62 length = this.heads.push(head2) 63 this.responseweb.setResponseHeader(this.heads) 64 this.responseweb.setResponseEncoding('utf-8') 65 this.responseweb.setResponseMimeType('text/html') 66 this.responseweb.setResponseCode(200) 67 this.responseweb.setReasonMessage('OK') 68 69 //// fd方案 --start 70 // '/xxx/.../test.html'为文件的本地路径 71 // @ts-ignore 72 let fd = fileio.openSync('/xxx/.../test.html', 0o102, 0o666) 73 this.responseweb.setResponseData(fd) 74 //// fd方案 --end 75 76 return this.responseweb 77 }) 78 } 79 } 80} 81``` 82 83应用hap不解压时,应用hap中的文件路径已不存在,通过`setResponseData(data:Resource)`将资源响应数据传递给内核。 84```ts 85// xxx.ets 86import web_webview from '@ohos.web.webview' 87 88@Entry 89@Component 90struct WebComponent { 91 controller: web_webview.WebviewController = new web_webview.WebviewController() 92 responseweb: WebResourceResponse = new WebResourceResponse() 93 heads: Header[] = new Array() 94 95 build() { 96 Column() { 97 Web({ src: 'www.example.com', controller: this.controller }) 98 .onInterceptRequest((event) => { 99 console.log('url:' + event.request.getRequestUrl()) 100 var head1:Header = { 101 headerKey:"Connection", 102 headerValue:"keep-alive" 103 } 104 var head2:Header = { 105 headerKey:"Cache-Control", 106 headerValue:"no-cache" 107 } 108 var length = this.heads.push(head1) 109 length = this.heads.push(head2) 110 this.responseweb.setResponseHeader(this.heads) 111 this.responseweb.setResponseEncoding('utf-8') 112 this.responseweb.setResponseMimeType('text/html') 113 this.responseweb.setResponseCode(200) 114 this.responseweb.setReasonMessage('OK') 115 116 //// Resource方案 --start 117 // 指定hap包中rawfile目录下的目标文件 118 this.responseweb.setResponseData($rawfile('test.html')) 119 //// Resource方案 --end 120 121 return this.responseweb 122 }) 123 } 124 } 125} 126``` 127