HarmonyOS 鸿蒙Next API11中Web部件的onInterceptRequest方法设计有问题
HarmonyOS 鸿蒙Next API11中Web部件的onInterceptRequest方法设计有问题 Web部件的onInterceptRequest的callback参数是一个函数, 其返回值类型是WebResourceResponse, 文档中说, 该函数返回null时, 代表不做拦截, 但是在api11中, 返回值类型不包含null时, 不能返回null, 从而无法按需拦截
如果您需要进行拦截,那么您需要对WebResourceResponse重新定义,设置您的拦截策略。如果不需要拦截,则直接返回null即可。
【不拦截】直接返回web中设置的网页
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController()
responseweb: WebResourceResponse = new WebResourceResponse();
heads:Header[] = new Array()
@State webdata: string = "<!DOCTYPE html>\n" +
"<html>\n"+
"<head>\n"+
"<title>intercept test</title>\n"+
"</head>\n"+
"<body>\n"+
"<h1>intercept test</h1>\n"+
"</body>\n"+
"</html>"
build() {
Column() {
Web({ src: 'www.example.com', controller: this.controller })
.onInterceptRequest((event) => {
if (event) {
console.log('url:' + event.request.getRequestUrl())
}
return null
})
}
}
}
【拦截】设置拦截策略,将按策略执行,下面样例替换成新的html
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController()
responseweb: WebResourceResponse = new WebResourceResponse()
heads:Header[] = new Array()
@State webdata: string = "<!DOCTYPE html>\n" +
"<html>\n"+
"<head>\n"+
"<title>intercept test</title>\n"+
"</head>\n"+
"<body>\n"+
"<h1>intercept test</h1>\n"+
"</body>\n"+
"</html>"
build() {
Column() {
Web({ src: 'www.example.com', controller: this.controller })
.onInterceptRequest((event) => {
if (event) {
console.log('url:' + event.request.getRequestUrl())
}
let head1:Header = {
headerKey:"Connection",
headerValue:"keep-alive"
}
let head2:Header = {
headerKey:"Cache-Control",
headerValue:"no-cache"
}
let length = this.heads.push(head1)
length = this.heads.push(head2)
this.responseweb.setResponseHeader(this.heads)
this.responseweb.setResponseData(this.webdata)
this.responseweb.setResponseEncoding('utf-8')
this.responseweb.setResponseMimeType('text/html')
this.responseweb.setResponseCode(200)
this.responseweb.setReasonMessage('OK')
return this.responseweb
})
}
}
}
箭头函数是通过函数体内容来判断返回类型的,直接写null变成无返回了,具体可以看下箭头函数介绍:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/introduction-to-arkts-V13
而华为工单3截图中第一个test的问题和上面一样,testMethod return的是一个null,第二个test是传递参数不对,定义的test传参是String类型。
更多关于HarmonyOS 鸿蒙Next API11中Web部件的onInterceptRequest方法设计有问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next API11版本中,如果开发者遇到Web部件的onInterceptRequest
方法设计上的问题,这通常可能涉及到该方法的预期行为与实际实现之间的差异,或者是该方法在处理特定Web请求时的逻辑问题。
具体来说,onInterceptRequest
方法的设计旨在允许开发者在Web视图加载资源之前拦截并处理这些请求。如果该方法的设计被认为有问题,可能是因为:
- 方法的调用时机不符合预期,导致某些请求被错误地拦截或未被拦截。
- 方法的参数或返回值设计不合理,使得开发者难以准确判断和处理请求。
- 方法在处理复杂请求或特定类型的请求时存在逻辑缺陷。
针对这些问题,开发者可以尝试查阅HarmonyOS的官方文档,了解onInterceptRequest
方法的详细设计和使用指南。同时,也可以检查自己的代码实现,确保正确使用了该方法,并遵循了HarmonyOS的最佳实践。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html