2

我有看起来像这样的qrc文件:

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

assets.js 中只是添加了弹出提示的功能:

    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)javascript 的按钮时,它可以工作。单击第二个按钮什么也不做。

似乎外部assets.js未正确加载。有什么建议我可以让它工作吗?

谢谢。

4

1 回答 1

1

Javascript 不是从 html 中评估的。找不到您的 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:/"));
于 2016-09-29T09:01:00.807 回答