QWebEngineView使用顶级await报‘Unexpected reserved word’错误求解决方案
QWebEngineView不支持顶级await的解决方案
你遇到的情况是:HTML文件在本地服务器的浏览器中能正常运行,但Qt的QWebEngineView对JS里的顶级await代码报错Unexpected reserved word——尽管已经用type="module"引入脚本。这大概率是因为你所用的Qt版本对应的Chromium内核版本较低,尚未支持模块脚本中的顶级await特性(该特性在Chromium 89及以上版本才完全支持)。
以下是几种替代解决方案:
方案1:将顶级await包装到自执行async函数中
把原本写在顶级作用域的await代码,放入一个立即执行的async函数内,既保留异步逻辑,又避开顶级await的兼容性限制:// 原顶级await代码: // const res = await fetch('http://localhost:8080/api'); // const data = await res.json(); // 修改后: (async () => { const res = await fetch('http://localhost:8080/api'); const data = await res.json(); // 后续业务逻辑 })();方案2:用Promise链式调用替代await
若不想使用async函数,可改用传统的Promise链式写法,兼容性覆盖绝大多数支持Promise的环境:fetch('http://localhost:8080/api') .then(res => res.json()) .then(data => { // 处理数据逻辑 }) .catch(err => { // 错误处理逻辑 });方案3:升级Qt版本
如果项目允许,升级到Qt 6.2及以上版本(对应Chromium 89+内核),即可原生支持模块脚本的顶级await特性,无需修改JS代码。
内容的提问来源于stack exchange,提问作者crends
相关产品推荐
相关产品推荐

