西瓜皮又皮了 2025-03-07 21:21 采纳率: 0%
浏览 18

qt webview调用html含动态加载js问题怎么解决?

  • vite打包的资源放在本地,通过本地服务进行访问,但qmlwebview组件加载html后遇到动态import的js报错link error。
  • webview直接通过服务访问这个js也没什么问题,且直接head preload直接预加载好,然后通过webview在访问这个URL就能正常访问了。

Ps:我是运行在平板上的,平板的浏览器直接输入访问这个url没问题!是webview什么安全策略的问题吗?我也设置了javascriptenabled为true啊,被拦截了吗! !

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-07 21:21
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    Qt WebView 在加载 HTML 文件时,可能会遇到动态加载 JS 文件的问题,这是因为 Qt WebView 在加载 HTML 文件时,会将 HTML 文件中的所有资源(包括 JS 文件)加载到内存中,而不是像浏览器那样异步加载。

    为了解决这个问题,你可以尝试以下几种方法:

    1. 使用 QUrl::fromLocalFile 将 JS 文件的路径转换为 QUrl 对象,然后使用 QWebEngineView::load 方法加载 HTML 文件时,指定 JS 文件的路径。
    QUrl jsUrl = QUrl::fromLocalFile("path/to/your/js/file.js");
    QWebEngineView *webView = new QWebEngineView();
    webView->load(QUrl("file:///path/to/your/html/file.html"));
    webView->loadJavaScript(jsUrl.toString());
    
    1. 使用 QWebEngineView::runJavaScript 方法异步加载 JS 文件。
    QWebEngineView *webView = new QWebEngineView();
    webView->load(QUrl("file:///path/to/your/html/file.html"));
    webView->runJavaScript("import('path/to/your/js/file.js');");
    
    1. 在 HTML 文件中使用 script 标签将 JS 文件异步加载。
    <script src="path/to/your/js/file.js" defer></script>
    
    1. 使用 QWebEngineView::settings 对象设置 JavaScriptEnabled 属性为 true,以启用 JavaScript 执行。
    QWebEngineView *webView = new QWebEngineView();
    webView->settings()->setAttribute(QWebEngineSettings::JavaScriptEnabled, true);
    webView->load(QUrl("file:///path/to/your/html/file.html"));
    

    这些方法可以帮助你解决 Qt WebView 在加载 HTML 文件时遇到的动态加载 JS 文件的问题。

    评论

报告相同问题?

问题事件

  • 修改了问题 3月8日
  • 创建了问题 3月7日