1# Class (WebSchemeHandler) 2 3Represents a **WebSchemeHandler** object used to intercept requests for a specific scheme. 4 5> **NOTE** 6> 7> - The initial APIs of this module are supported since API version 9. Updates will be marked with a superscript to indicate their earliest API version. 8> 9> - The initial APIs of this class are supported since API version 12. 10> 11> - You can preview how this component looks on a real device, but not in DevEco Studio Previewer. 12 13## Module to Import 14 15```ts 16import { webview } from '@kit.ArkWeb'; 17``` 18 19## onRequestStart<sup>12+</sup> 20 21onRequestStart(callback: (request: WebSchemeHandlerRequest, handler: WebResourceHandler) => boolean): void 22 23Called when a request starts. In this callback, you can determine whether to intercept the request. If **false** is returned, the request is not intercepted and the handler is invalid. If **true** is returned, the request is intercepted. 24 25**System capability**: SystemCapability.Web.Webview.Core 26 27**Parameters** 28 29| Name | Type | Mandatory| Description | 30| -------- | -------------------- | ---- | ---------- | 31| callback | (request: [WebSchemeHandlerRequest](./arkts-apis-webview-WebSchemeHandlerRequest.md), handler: [WebResourceHandler](./arkts-apis-webview-WebResourceHandler.md)) => boolean | Yes| Callback invoked when a request for the specified scheme starts. **request** represents a request. **handler** provides the custom response header and response body for the **Web** component. The return value indicates whether the request is intercepted.| 32 33**Error codes** 34 35For details about the error codes, see [Webview Error Codes](errorcode-webview.md). 36 37| Error Code| Error Message | 38| -------- | ------------------------------------- | 39| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 40 41**Example** 42 43```ts 44// xxx.ets 45import { webview } from '@kit.ArkWeb'; 46import { BusinessError } from '@kit.BasicServicesKit'; 47import { buffer } from '@kit.ArkTS'; 48import { WebNetErrorList } from '@ohos.web.netErrorList'; 49 50@Entry 51@Component 52struct WebComponent { 53 controller: webview.WebviewController = new webview.WebviewController(); 54 schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); 55 htmlData: string = "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>"; 56 57 build() { 58 Column() { 59 Web({ src: 'https://www.example.com', controller: this.controller }) 60 .onControllerAttached(() => { 61 try { 62 this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { 63 console.log("[schemeHandler] onRequestStart"); 64 try { 65 console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl()); 66 console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod()); 67 console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer()); 68 console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame()); 69 console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture()); 70 console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length); 71 console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType()); 72 console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl()); 73 let header = request.getHeader(); 74 for (let i = 0; i < header.length; i++) { 75 console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue); 76 } 77 let stream = request.getHttpBodyStream(); 78 if (stream) { 79 console.log("[schemeHandler] onRequestStart has http body stream"); 80 } else { 81 console.log("[schemeHandler] onRequestStart has no http body stream"); 82 } 83 } catch (error) { 84 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 85 } 86 87 if (request.getRequestUrl().endsWith("example.com")) { 88 return false; 89 } 90 91 let response = new webview.WebSchemeHandlerResponse(); 92 try { 93 response.setNetErrorCode(WebNetErrorList.NET_OK); 94 response.setStatus(200); 95 response.setStatusText("OK"); 96 response.setMimeType("text/html"); 97 response.setEncoding("utf-8"); 98 response.setHeaderByName("header1", "value1", false); 99 } catch (error) { 100 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 101 } 102 103 // Before calling didFinish or didFail, call didReceiveResponse to send a response header to this request. 104 let buf = buffer.from(this.htmlData) 105 try { 106 if (buf.length == 0) { 107 console.log("[schemeHandler] length 0"); 108 resourceHandler.didReceiveResponse(response); 109 // If the value of buf.length is 0 in normal cases, call resourceHandler.didFinish(). Otherwise, call resourceHandler.didFail(). 110 resourceHandler.didFail(WebNetErrorList.ERR_FAILED); 111 } else { 112 console.log("[schemeHandler] length 1"); 113 resourceHandler.didReceiveResponse(response); 114 resourceHandler.didReceiveResponseBody(buf.buffer); 115 resourceHandler.didFinish(); 116 } 117 } catch (error) { 118 console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 119 } 120 return true; 121 }) 122 123 this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { 124 console.log("[schemeHandler] onRequestStop"); 125 }); 126 127 this.controller.setWebSchemeHandler('https', this.schemeHandler); 128 } catch (error) { 129 console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); 130 } 131 }) 132 .javaScriptAccess(true) 133 .domStorageAccess(true) 134 } 135 } 136} 137``` 138## onRequestStop<sup>12+</sup> 139 140onRequestStop(callback: Callback\<WebSchemeHandlerRequest\>): void 141 142Called when a request is complete, under the prerequisite that the request is indicated as intercepted in the **onRequestStart** callback. Specifically, this callback is invoked in the following cases: 143 1441. The **WebResourceHandler** object calls **didFail** or **didFinish**. 145 1462. The request is interrupted due to other reasons. 147 148**System capability**: SystemCapability.Web.Webview.Core 149 150**Parameters** 151 152| Name | Type | Mandatory| Description | 153| -------- | -------------------- | ---- | ---------- | 154| callback | Callback\<[WebSchemeHandlerRequest](./arkts-apis-webview-WebSchemeHandlerRequest.md)\> | Yes | Callback invoked when the request is complete.| 155 156**Error codes** 157 158For details about the error codes, see [Webview Error Codes](errorcode-webview.md). 159 160| Error Code| Error Message | 161| -------- | ------------------------------------- | 162| 401 | Invalid input parameter. | 163 164**Example** 165 166For the complete sample code, see [onRequestStart](#onrequeststart12). 167