html js加载本地文件报错处理,跨域问题

作者遇到在本地使用three.js加载HTML文件时的跨域错误,通过搭建本地服务器和安装live-server解决了问题。此外,还提到如何实现实时更新修改后的HTML内容。

这个问题是怎么来的?我写了一个本地html文件,里面通过three.js加载并显示一个本地三维模型,结果报错了。

报错如下:

Access to XMLHttpRequest at 'file:///C:/model/quater.mtl' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.

没玩过前端,看到这个错误不知道从何下手,查了半天了解到大体意思就是:

浏览器html加载本地资源文件,会被阻止。解决方法是搭建一个本地服务器,然后从这个服务器访问这个html文件,这样html和其他资源文件,会被浏览器判定为同一个域。

从这里找到一个解决方法:

Three.js教程

首先下载node.js的windows安装包,安装完以后,打开命令行,查询两个版本号,如果没有报错,就说明node.js和npm都安装好了。

在前端打包完成后,双击打开 `index.html` 文件时出现错误,主要是由于浏览器的安全机制限制了本地文件(`file://` 协议)的访问权限。以下是一些解决方案: 1. **使用本地服务器运行打包文件** 不建议直接通过双击打开 `index.html` 文件,因为这种方式容易引发问题。可以通过安装 **Live Server** 插件(如 VS Code 的 Live Server 插件)运行打包后的文件。该插件会在本地启动一个 HTTP 服务器,从而避免 `file://` 协议带来的限制。 2. **修改 Vite 配置以支持本地文件访问** 如果使用的是 Vite 构建工具,可以在 `vite.config.js` 文件中添加 `@vitejs/plugin-legacy` 插件,并设置 `base: './'` 以确保资源路径正确加载。此外,将 Vue Router 的 `history` 模式改为 `hash` 模式,有助于避免路径问题导致的空白页面和错误。 ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import legacy from '@vitejs/plugin-legacy' export default defineConfig({ plugins: [ vue(), legacy({ targets: ['ie>=11'], additionalLegacyPolyfills: ['regenerator-runtime/runtime'] }) ], base: './' }) ``` 3. **修改 `index.html` 文件中的脚本标签** 在打包生成的 `index.html` 文件中,删除 `<script>` 标签中的 `type="module"`、`nomodule` 和 `crossorigin` 属性,并将 `data-src` 替换为 `src`。这样可以避免浏览器因模块加载问题报错。 4. **使用支持本地文件访问的浏览器** 某些浏览器(如 Chrome)允许通过命令行参数禁用安全限制,以便测试本地文件。例如,可以通过以下命令启动 Chrome: ``` chrome.exe --disable-web-security --user-data-dir="C:/ChromeDevSession" ``` 但这种方式仅适用于开发和测试环境,不建议在生产环境中使用。 5. **调整服务器配置** 如果需要将项目部署到服务器的二级文件夹中,确保服务器配置正确,以便支持静态资源的正确加载。通常情况下,Vite 的默认配置已经足够支持大多数服务器环境。 通过以上方法,可以有效解决前端打包生成的 `index.html` 文件在双击打开时遇到的问题。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值