You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Qt for WebAssembly运行时出现TypeError: Failed to fetch错误

Qt WebAssembly双击本地html文件报错的解决方法

问题原因

你遇到的报错是浏览器的默认安全策略导致的:

Fetch API cannot load file:///xxx.js. URL scheme "file" is not supported。

浏览器禁止file://本地文件协议下使用Fetch API加载其他本地资源,从你提供的qtloader.js代码也能看到,第249行调用了原生fetch方法加载依赖资源,双击打开html走的是file协议,自然触发报错。而emrun命令本质是启动了一个本地临时HTTP服务器,页面走http://协议访问,符合Fetch API的调用要求,因此运行正常。

解决方案

方案一:使用本地HTTP服务器启动(最推荐)

不需要修改任何代码,也不会降低浏览器安全性,适合所有调试场景,常用启动方式如下:

  • 如果你有Python3环境,直接在项目根目录(index.html所在目录)执行命令:
    python3 -m http.server 8080
    启动后在Chrome地址栏输入http://localhost:8080即可访问程序
  • 如果你有Node.js环境,执行命令:
    npx http-server -p 8080
    同样访问http://localhost:8080即可
  • 也可以用Nginx、Apache等成熟Web服务器,将项目目录挂载为站点根目录访问

方案二:修改Chrome启动参数临时禁用安全限制(仅适合本地调试)

注意:该方案会降低浏览器安全防护能力,仅建议用调试专用的浏览器实例使用,不要用开启该参数的浏览器访问公网网页。

  • Windows系统:右键Chrome快捷方式,选择「属性」,在「目标」输入框的内容末尾加一个空格,再追加参数--allow-file-access-from-files,保存后双击该快捷方式启动Chrome,再拖入本地index.html即可正常运行
  • Linux系统:终端执行命令启动Chrome:
    google-chrome --allow-file-access-from-files
    之后打开本地html文件即可

方案三:资源内嵌(仅适合离线分发场景)

如果需要做成双击即可运行的单文件离线页面,可以将依赖的.js、.wasm资源全部转成Base64格式内嵌到index.html中,修改qtloader.js的fetch逻辑直接读取内嵌资源,不需要发起网络请求。但该方案改造成本高,且每次重新编译Qt程序都需要重新处理内嵌资源,非必要不推荐。

内容的提问来源于stack exchange,提问作者siya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:00:04