HarmonyOS 本地webView跨域方案

我在rawfile中添加一个H5的站点源码,包含html、css、js。然后使用webview去加载这个本地站点(resource或者file协议),

这个H5网页会去加载一些远程的资源文件(图片、js、css),也会去请求一些接口

问题:

对于图片、js、css不存在跨域的问题,但是请求的接口(get、post等),就会出现跨域问题。

当然可以利用onInterceptRequest事件去拦截,然后利用native的方法实现接口请求

但是onInterceptRequest会拦截所有的请求,而我的目的只是为了让那些存在跨越问题的请求能够正确得到response,而不希望去拦截那些不存在跨越问题的请

好像没有好的办法去区分哪些请求存在跨域问题,哪些请求不存在跨域问题。

是否有什么开关可以让webview允许跨域

(仅限前端实现,无法要求后端修改接口来允许跨域)

HarmonyOS
2024-09-05 10:54:28
浏览
已于2024-9-5 18:41:33修改
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以使用web组件的loadData接口,用于加载指定的数据,该接口的参数baseUrl可以实现:入参baseUrl可以指定的一个URL路径(“http”/“https”/"data"协议),并由Web组件赋值给window.origin。通过该接口更改协议可以解决跨域问题。

web_webview.WebviewController.customizeSchemes([{schemeName: “abc”, isSupportCors: true, isSupportFetch: true}]);

通过customizeSchemes接口,isSupportCORS表示是否支持跨域请求。schemeName表示自定义协议名称。

示例代码:

aboutToAppear(): void { 
  try { 
  web_webview.WebviewController.customizeSchemes([{ 
    schemeName: “abc”, 
    isSupportCORS: true, 
    isSupportFetch: true 
  }]); 
} catch (error) { 
  console.error(ErrorCode: ${error.code}, ErrorMessage: ${error.message}); 
} 
} 
build() { 
  Column() { 
    Web({ src: $rawfile(“local.html”), controller: this.controller }) 
  } 
}
分享
微博
QQ
微信
回复
2024-09-05 15:49:47
相关问题
HarmonyOS webview问题
557浏览 • 1回复 待解决
webview问题解决方案
2564浏览 • 1回复 待解决
HarmonyOS Web组件请求问题
289浏览 • 1回复 待解决
HarmonyOS web离线加载请求问题
482浏览 • 1回复 待解决
Web组件如何访问资源?
379浏览 • 1回复 待解决
iframe标签 src内部访问top问题
249浏览 • 1回复 待解决
HarmonyOS webview加载本地html问题
339浏览 • 1回复 待解决
HarmonyOS webview如何播放本地沙箱视频
1503浏览 • 1回复 待解决
本地收发消息实践,谁有好的方案
595浏览 • 1回复 待解决
webview组件能建立本地服务器吗?
2307浏览 • 1回复 待解决
HarmonyOS 文件样式复用
94浏览 • 1回复 待解决
HarmonyOS 能否模块使用@Styles
291浏览 • 1回复 待解决
HarmonyOS @Expend模块使用问题
346浏览 • 1回复 待解决
HarmonyOS RelationalStore是否支持
538浏览 • 1回复 待解决