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 setResponseData 18 19- 变更前: 20 21 ``` 22 setResponseData(data: string | number) 23 ``` 24 25- 变更后: 26 27 ``` 28 setResponseData(data: string | number | Resource) 29 ``` 30 31**适配指导** 32 33应用hap解压时,打开并持有资源文件fd,最后通过`setResponseData(data:number)`将资源响应数据传递给内核。 34 35``` 36// xxx.ets 37import web_webview from '@ohos.web.webview' 38import fileio from '@ohos.fileio'; 39 40@Entry 41@Component 42struct WebComponent { 43 controller: web_webview.WebviewController = new web_webview.WebviewController() 44 responseweb: WebResourceResponse = new WebResourceResponse() 45 heads: Header[] = new Array() 46 47 build() { 48 Column() { 49 Web({ src: 'www.example.com', controller: this.controller }) 50 .onInterceptRequest((event) => { 51 console.log('url:' + event.request.getRequestUrl()) 52 var head1:Header = { 53 headerKey:"Connection", 54 headerValue:"keep-alive" 55 } 56 var head2:Header = { 57 headerKey:"Cache-Control", 58 headerValue:"no-cache" 59 } 60 var length = this.heads.push(head1) 61 length = this.heads.push(head2) 62 this.responseweb.setResponseHeader(this.heads) 63 this.responseweb.setResponseEncoding('utf-8') 64 this.responseweb.setResponseMimeType('text/html') 65 this.responseweb.setResponseCode(200) 66 this.responseweb.setReasonMessage('OK') 67 68 //// fd方案 --start 69 // '/xxx/.../test.html'为文件的本地路径 70 // @ts-ignore 71 let fd = fileio.openSync('/xxx/.../test.html', 0o102, 0o666) 72 this.responseweb.setResponseData(fd) 73 //// fd方案 --end 74 75 return this.responseweb 76 }) 77 } 78 } 79} 80``` 81 82应用hap不解压时,应用hap中的文件路径已不存在,通过`setResponseData(data:Resource)`将资源响应数据传递给内核。 83 84``` 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```