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的接口看起来毫无意义,希望大家帮忙看看有什么解决办法

8 回复

这个问题通过在线提单进一步解决: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内核,遵循同源策略,即默认不允许跨域请求本地资源。要解决此问题,可以通过以下方式:

  1. 使用file://协议:将JS文件路径改为file://协议,例如file:///data/storage/el1/bundle/rawfile/yourfile.js。这种方式会绕过跨域限制,但需确保文件路径正确。

  2. 设置Web组件的allowUniversalAccessFromFileURLs属性:在Web组件的配置中,将allowUniversalAccessFromFileURLs属性设置为true,允许从文件URL加载跨域资源。示例代码如下:

    webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
  3. 使用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;
        }
    });
  4. 将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组件访问。

通过这些方法,可以有效解决跨域错误问题。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!