HarmonyOS 鸿蒙Next 在webview中如何判定302跳转
HarmonyOS 鸿蒙Next 在webview中如何判定302跳转
可以使用onLoadIntercept拦截资源加载,并且根据回调OnLoadInterceptEvent判断是否是重定向。
import web_webview from '@ohos.web.webview';
@Entry
@Component
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController();
@State loadUrl: string | null = null
build() {
Column() {
Web({ src: 'https://www.huawei.com', controller: this.controller })
.onLoadIntercept((event) => {
if (this.loadUrl == null) { //判断首次加载
console.log("loginfo:首次加载")
this.loadUrl = event.data.getRequestUrl()
}
if (this.loadUrl != event.data.getRequestUrl() && this.loadUrl != null) { //非首次加载判断
console.log("loginfo:两次url不一样—上次加载url:" + (this.loadUrl == null ? 'null' : this.loadUrl) +
"----本次加载URL:" + event.data.getRequestUrl()) //打印加载url 可以删掉
this.loadUrl = event.data.getRequestUrl() //将此次加载路径保存入变量中,为下次对比做参照
if (event.data.isRedirect()) { //判断服务器重定向
console.log("loginfo:服务器重定向")
} else {
if (event.data.isRequestGesture()) { // 判断是否发生了交互,未交互就跳转认定为代码重定向,发生了交互认定为正常页面跳转
console.log("loginfo:页面跳转") // 用户交互发生的页面跳转属于正常页面跳转,不属于重定向
} else {
console.log("loginfo:客户端页面代码重定向") //若未发生交互,直接进行页面跳转则认定发生了重定向
}
}
} else {
console.log("两次url相同,未生重定向") //两次url相同,为发生重定向
}
return false
})
}
}
}
更多关于HarmonyOS 鸿蒙Next 在webview中如何判定302跳转的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
// xxx.ets
import web_webview from ‘[@ohos](/user/ohos).web.webview’;
[@Entry](/user/Entry)
[@Component](/user/Component)
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController();
[@State](/user/State) loadUrl:string|null=null
build() {
Column() {
Web({ src: ‘https://b.pingan.com.cn/user’, controller: this.controller })
.onLoadIntercept((event) => {
if(this.loadUrl==null)//判断首次加载
{
console.log(“loginfo:首次加载”)
this.loadUrl=event.data.getRequestUrl()
}
if(this.loadUrl!=event.data.getRequestUrl()&&this.loadUrl!=null)//非首次加载判断
{
console.log(“loginfo:两次url不一样—上次加载url:”+(this.loadUrl==null?‘null’:this.loadUrl)+"----本次加载URL:"+event.data.getRequestUrl())//打印加载url 可以删掉
this.loadUrl=event.data.getRequestUrl()//将此次加载路径保存入变量中,为下次对比做参照
if(event.data.isRedirect())//判断服务器重定向
{
console.log(“loginfo:服务器重定向”)
}else{
if(event.data.isRequestGesture())//判断是否发生了交互,未交互就跳转认定为代码重定向,发生了交互认定为正常页面跳转
{
console.log(“loginfo:页面跳转”)//,用户交互发生的页面跳转属于正常页面跳转,不属于重定向
}else{
console.log(“loginfo:客户端页面代码重定向”)//若未发生交互,直接进行页面跳转则认定发生了重定向
}
}
}else{
console.log(“两次url相同,未生重定向”)//两次url相同,为发生重定向
}
return false
})
}
}
}
在HarmonyOS 鸿蒙Next系统中,判定WebView中的302跳转可以通过监听WebView的导航事件来实现。WebView组件提供了相关的回调接口,用于捕获HTTP状态码和URL变化。
具体步骤如下:
-
设置WebViewClient:为WebView设置WebViewClient,覆盖
shouldOverrideUrlLoading
或shouldInterceptRequest
方法(根据API版本选择)。 -
捕获HTTP响应:在
shouldInterceptRequest
方法中,可以获取到WebResourceRequest对象,检查其HTTP状态码。如果是302,则表明发生了重定向。 -
处理302跳转:根据业务需求,可以在捕获到302跳转后执行相应逻辑,比如记录跳转URL,或者决定是否允许该跳转。
示例代码片段(假设使用shouldInterceptRequest):
webView.setWebViewClient(new WebViewClient() {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().contains("302")) {
// 这里判断逻辑简化,实际应检查HTTP响应码
// 捕获到302跳转,执行相应逻辑
// 例如:记录跳转URL
}
return super.shouldInterceptRequest(view, request);
}
});
注意:上述代码中的contains("302")
仅用于示例,实际应解析HTTP响应头中的状态码。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html