HarmonyOS鸿蒙Next中Web组件加载本地rawfile的JS文件报跨域错误
HarmonyOS鸿蒙Next中Web组件加载本地rawfile的JS文件报跨域错误 官方文档里的Web组件有加载本地rawfile的功能,但是如果html里有其他的css文件和js文件引用,则会报跨域错误“Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, chrome-untrusted, https”
查看论坛其他问答说是不支持,但是如果不支持js文件加载,这个Web组件加载本地rawfile的接口看起来毫无意义,希望大家帮忙看看有什么解决办法
这个问题通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持
更多关于HarmonyOS鸿蒙Next中Web组件加载本地rawfile的JS文件报跨域错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
楼主现在是没有在看论坛了吗
这个导入问题,可以看一下导入时是否使用的是require.js 导入,require.js加载资源时会构建XMLHttpReuqest请求本地资源,导致跨域问题,可以在node_modules中找到requirejs的依赖,修改/env/lib/plugin/text.js中writeFile方法,增加对运行环境判断,如果是鸿蒙webview环境 调用jsbridge使用原生方法读取文件
请问楼主解决了吗
请问该问题解决到什么程度了呢?
解决了吗,遇到同样的问题
在HarmonyOS鸿蒙Next中,使用Web组件加载本地rawfile中的JS文件时遇到跨域错误,通常是由于浏览器安全策略导致的。鸿蒙Next的Web组件基于Chromium内核,遵循同源策略,即默认不允许跨域请求本地资源。要解决此问题,可以通过以下方式:
-
使用
file://
协议:将JS文件路径改为file://
协议,例如file:///data/storage/el1/bundle/rawfile/yourfile.js
。这种方式会绕过跨域限制,但需确保文件路径正确。 -
设置Web组件的
allowUniversalAccessFromFileURLs
属性:在Web组件的配置中,将allowUniversalAccessFromFileURLs
属性设置为true
,允许从文件URL加载跨域资源。示例代码如下:webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
-
使用
WebResourceResponse
拦截请求:通过拦截Web组件的请求,将本地JS文件作为响应返回,避免跨域问题。示例代码如下:webView.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { if (url.endsWith(".js")) { InputStream inputStream = getResources().openRawResource(R.raw.yourfile); return new WebResourceResponse("application/javascript", "UTF-8", inputStream); } return null; } });
-
将JS文件内联到HTML中:将JS代码直接嵌入HTML文件,避免通过外部文件加载。例如:
<script> // Your JS code here </script>
以上方法均可有效解决鸿蒙Next中Web组件加载本地JS文件时的跨域错误。
在HarmonyOS鸿蒙Next中,Web组件加载本地rawfile的JS文件时出现跨域错误,通常是由于浏览器的同源策略限制。解决方法包括:
- 使用本地服务器:通过本地服务器(如nginx)加载文件,确保文件路径与Web组件同源。
- 修改Web组件设置:在Web组件中启用跨域访问权限,允许加载本地资源。
- 使用相对路径:确保JS文件的路径是相对于Web组件的路径,避免绝对路径导致的跨域问题。
- 检查文件权限:确保rawfile目录及其文件的权限设置正确,允许Web组件访问。
通过这些方法,可以有效解决跨域错误问题。