我有 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 似乎未正确加载。 任何消化我怎么能让它运作?
感谢。
答案 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:/"));