QWebView可以从Qt资源文件加载* .js并运行它们吗?

时间:2016-09-28 21:52:44

标签: c++ windows qt qtwebkit qtwebview

我有 qrc 文件,如下所示:

 <qresource prefix="/web">
        <file alias="assets.js">../web/assets.js</file>
        <file alias="index.html">../web/index.html</file>
</qresource>

内部 assets.js 只需为allert popup添加功能:

    function myFunction() 
    {
        window.alert("Hello from assets.js");
    }

index.html 内添加另一个用于警告弹出窗口的JavaScript,加载 assets.js 并添加2个按钮。第一个从外部javascript文件调用窗口弹出窗口( assets.js ),第二个调用嵌入 index.html 文件的javascript:

<!DOCTYPE html>
<html>
  <head>
  </head>
  <body>
    <script>
        function localFunction() 
        {
            window.alert('HTML loaded');
        }

    </script>

    <script src="assets.js"></script>

    <button onclick="myFunction()">External JS</button>
    <button onclick="localFunction()">Local JS</button>


  </body>
</html>

现在,当我尝试在qtwebkit中加载 index.html 时:

webView->load(QUrl(QStringLiteral("qrc:/web/index.html")));

我可以看到 index.html 已加载好了(我可以看到2个按钮) 当点击应该调用本地(html embeded)javascript的按钮时,它可以工作。 单击第二个按钮不执行任何操作。

外部 assets.js 似乎未正确加载。 任何消化我怎么能让它运作?

感谢。

1 个答案:

答案 0 :(得分:0)

不会从html评估Javascript。找不到您的JS文件。以下内容无效:

<script src="assets.js"></script>

明确尝试:

const QString js = readFile("qrc:/web/assets.js"); // Load your javascript file
view->page()->mainFrame()->evaluateJavaScript(js);

另一种解决方案,效率更高:使用QRC系统并在setHtml中设置baseUrl以正确链接所有文件:

   const QString html = readFile(":/index.html");
   view->setHtml(html, QUrl("qrc:/"));