1# 自定义页面请求响应 2 3 4Web组件支持在应用拦截到页面请求后自定义响应请求能力。开发者通过[onInterceptRequest()](../reference/arkui-ts/ts-basic-components-web.md#oninterceptrequest9)接口来实现自定义资源请求响应 。自定义请求能力可以用于开发者自定义Web页面响应、自定义文件资源响应等场景。 5 6 7Web网页上发起资源加载请求,应用层收到资源请求消息。应用层构造本地资源响应消息发送给Web内核。Web内核解析应用层响应信息,根据此响应信息进行页面资源加载。 8 9 10在下面的示例中,Web组件通过拦截页面请求“https://www.intercept.com/test.html”, 在应用侧代码构建响应资源,实现自定义页面响应场景。 11 12 13- 前端页面example.html代码。 14 15 ```html 16 <!DOCTYPE html> 17 <html> 18 <head> 19 <meta charset="utf-8"> 20 <title>example</title> 21 </head> 22 <body> 23 <!-- 页面资源请求 --> 24 <a href="https://www.intercept.com/test.html">intercept test!</a> 25 </body> 26 </html> 27 ``` 28 29- 应用侧代码。 30 31 ```ts 32 // xxx.ets 33 import web_webview from '@ohos.web.webview'; 34 35 @Entry 36 @Component 37 struct WebComponent { 38 controller: web_webview.WebviewController = new web_webview.WebviewController() 39 responseResource: WebResourceResponse = new WebResourceResponse() 40 // 开发者自定义响应数据 41 @State webData: string = '<!DOCTYPE html>\n' + 42 '<html>\n'+ 43 '<head>\n'+ 44 '<title>intercept test</title>\n'+ 45 '</head>\n'+ 46 '<body>\n'+ 47 '<h1>intercept ok</h1>\n'+ 48 '</body>\n'+ 49 '</html>' 50 build() { 51 Column() { 52 Web({ src: $rawfile('example.html'), controller: this.controller }) 53 .onInterceptRequest((event) => { 54 console.info('url:' + event.request.getRequestUrl()); 55 // 拦截页面请求 56 if (event.request.getRequestUrl() !== 'https://www.intercept.com/test.html') { 57 return null; 58 } 59 // 构造响应数据 60 this.responseResource.setResponseData(this.webData); 61 this.responseResource.setResponseEncoding('utf-8'); 62 this.responseResource.setResponseMimeType('text/html'); 63 this.responseResource.setResponseCode(200); 64 this.responseResource.setReasonMessage('OK'); 65 return this.responseResource; 66 }) 67 } 68 } 69 } 70 ``` 71