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