可以拿到请求body,请求头并在处理之后使用 WebResourceHandler 返回响应。
webview.WebviewController.setWebDebuggingAccess(true)
this.schemeHandler.onRequestStart((request: webview.WebSchemeHandlerRequest,
handler: webview.WebResourceHandler) => {
console.log(request.getRequestUrl(), request.getRequestMethod());
let body = request.getHttpBodyStream();
if (body) {
body.initialize().then(() => {
body?.read(body.getSize()).then((buffer) => {
console.log("body", new util.TextDecoder().decodeToString(new Uint8Array(buffer)));
let resp = new webview.WebSchemeHandlerResponse();
resp.setStatus(200)
resp.setHeaderByName('Access-Control-Allow-Origin', '*', true);
resp.setHeaderByName('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS', true);
resp.setHeaderByName('Access-Control-Max-Age', '86400', true);
let data = new Uint8Array(202);
new util.TextEncoder().encodeIntoUint8Array("POST 2222" + request.getRequestUrl(), data)
handler.didReceiveResponseBody(data.buffer);
handler.didReceiveResponse(resp);
handler.didFinish();
})
})
} else {
let resp = new webview.WebSchemeHandlerResponse();
resp.setHeaderByName('Access-Control-Allow-Origin', '*', true);
resp.setHeaderByName('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS', true);
resp.setHeaderByName('Access-Control-Max-Age', '86400', true);
resp.setStatus(200)
let data = new Uint8Array(200);
new util.TextEncoder().encodeIntoUint8Array("GET 2222" + request.getRequestUrl(), data)
handler.didReceiveResponseBody(data.buffer);
handler.didReceiveResponse(resp);
handler.didFinish();
}
return true;
});
需要在controller被启用的时候设置schemeHandler
Web({ controller: this.controller, src: `${VIRTUAL_PATH}/index.html`, renderMode: RenderMode.ASYNC_RENDER, })
.width('100%')
.height('100%')
.onControllerAttached(() => {
this.controller.setWebSchemeHandler("http", this.schemeHandler);
this.controller.setWebSchemeHandler("https", this.schemeHandler);
})
.....
}











网友评论