diff --git a/zh-cn/application-dev/reference/apis-arkweb/arkts-apis-webview-WebResourceHandler.md b/zh-cn/application-dev/reference/apis-arkweb/arkts-apis-webview-WebResourceHandler.md index 4a7c7bdd16d1b4975cf0da6c77d6469f8a5d5c44..16ee7ff84c3eb3d0b67cc36e7c2db9dff99955f7 100644 --- a/zh-cn/application-dev/reference/apis-arkweb/arkts-apis-webview-WebResourceHandler.md +++ b/zh-cn/application-dev/reference/apis-arkweb/arkts-apis-webview-WebResourceHandler.md @@ -109,4 +109,100 @@ didFail(code: WebNetErrorList): void **示例:** -示例请参考[OnRequestStart](./arkts-apis-webview-WebSchemeHandler.md#onrequeststart12)。 \ No newline at end of file +示例请参考[OnRequestStart](./arkts-apis-webview-WebSchemeHandler.md#onrequeststart12)。 + +## didFail20+ + +didFail(code: WebNetErrorList, completeIfNoResponse: boolean): void + +通知ArkWeb内核,被拦截请求应返回失败。若completeIfNoResponse为false,调用前需优先调用[didReceiveResponse](#didreceiveresponse12),将构造的响应头传递给被拦截的请求。若completeIfNoResponse为true,且调用前未调用[didReceiveResponse](#didreceiveresponse12),则自动生成一个响应头,网络错误码为-104,详情参见[WebNetErrorList](arkts-apis-netErrorList.md#webneterrorlist)。 + +**系统能力:** SystemCapability.Web.Webview.Core + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| --------| ------- | ---- | ---------------------------| +| code | [WebNetErrorList](arkts-apis-netErrorList.md#webneterrorlist) | 是 | 网络错误码。 | +| completeIfNoResponse | boolean | 是 | 调用当前接口时,若之前未调用过[didReceiveResponse](#didreceiveresponse12),是否完成此次网络请求;值为true时,若之前未调用过[didReceiveResponse](#didreceiveresponse12),则会自动生成一个response以完成此次网络请求,网络错误码为-104;值为false时,将等待应用调用[didReceiveResponse](#didreceiveresponse12)并传入response,不会直接完成此次网络请求。 | + +**错误码:** + +以下错误码的详细介绍请参见[Webview错误码](errorcode-webview.md)。 + +| 错误码ID | 错误信息 | +| -------- | ------------------------------------- | +| 17100101 | The errorCode is either ARKWEB_NET_OK or outside the range of error codes in WebNetErrorList. | +| 17100021 | The resource handler is invalid. | + +**示例:** + +```ts +// xxx.ets +import { webview, WebNetErrorList } from '@kit.ArkWeb'; +import { BusinessError } from '@kit.BasicServicesKit'; + +@Entry +@Component +struct WebComponent { + controller: webview.WebviewController = new webview.WebviewController(); + schemeHandler: webview.WebSchemeHandler = new webview.WebSchemeHandler(); + + build() { + Column() { + Web({ src: 'https://www.example.com', controller: this.controller }) + .onControllerAttached(() => { + try { + this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest, resourceHandler: webview.WebResourceHandler) => { + console.log("[schemeHandler] onRequestStart"); + try { + console.log("[schemeHandler] onRequestStart url:" + request.getRequestUrl()); + console.log("[schemeHandler] onRequestStart method:" + request.getRequestMethod()); + console.log("[schemeHandler] onRequestStart referrer:" + request.getReferrer()); + console.log("[schemeHandler] onRequestStart isMainFrame:" + request.isMainFrame()); + console.log("[schemeHandler] onRequestStart hasGesture:" + request.hasGesture()); + console.log("[schemeHandler] onRequestStart header size:" + request.getHeader().length); + console.log("[schemeHandler] onRequestStart resource type:" + request.getRequestResourceType()); + console.log("[schemeHandler] onRequestStart frame url:" + request.getFrameUrl()); + let header = request.getHeader(); + for (let i = 0; i < header.length; i++) { + console.log("[schemeHandler] onRequestStart header:" + header[i].headerKey + " " + header[i].headerValue); + } + let stream = request.getHttpBodyStream(); + if (stream) { + console.log("[schemeHandler] onRequestStart has http body stream"); + } else { + console.log("[schemeHandler] onRequestStart has no http body stream"); + } + } catch (error) { + console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); + } + + if (request.getRequestUrl().endsWith("example.com")) { + return false; + } + + try { + // 直接调用didFail(WebNetErrorList.ERR_FAILED, true),自动构造一个网络请求错误ERR_CONNECTION_FAILED + resourceHandler.didFail(WebNetErrorList.ERR_FAILED, true); + } catch (error) { + console.error(`[schemeHandler] ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); + } + return true; + }) + + this.schemeHandler.onRequestStop((request: webview.WebSchemeHandlerRequest) => { + console.log("[schemeHandler] onRequestStop"); + }); + + this.controller.setWebSchemeHandler('https', this.schemeHandler); + } catch (error) { + console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`); + } + }) + .javaScriptAccess(true) + .domStorageAccess(true) + } + } +} +``` \ No newline at end of file diff --git a/zh-cn/application-dev/reference/apis-arkweb/errorcode-webview.md b/zh-cn/application-dev/reference/apis-arkweb/errorcode-webview.md index 92daf3ff7551cad75e3390857fd8841e28df730f..74a3e086b9d1304f1932c4207fba71b5b2fb7add 100644 --- a/zh-cn/application-dev/reference/apis-arkweb/errorcode-webview.md +++ b/zh-cn/application-dev/reference/apis-arkweb/errorcode-webview.md @@ -361,3 +361,21 @@ The port number is not within the allowed range. **处理步骤** 检查使用的端口号是否在允许的取值范围内。 + +## 17100101 使用了错误的网络错误码 + +**错误信息** + +The errorCode is either ARKWEB_NET_OK or outside the range of error codes in WebNetErrorList. + +**错误描述** + +网络错误码为ARKWEB_NET_OK或者超出了WebNetErrorList中的错误码范围。 + +**可能原因** + +使用的错误码不在[WebNetErrorList](arkts-apis-netErrorList.md#webneterrorlist)范围内,或者调用didFail接口时使用了NET_OK错误码。 + +**处理步骤** + +检查使用的错误码是否在[WebNetErrorList](arkts-apis-netErrorList.md#webneterrorlist)范围内,或者调用difFail时是否使用了NET_OK错误码。