Может ли QWebView загружать * .js из файлов ресурсов Qt и запускать их?

я имею 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) и во-вторых, чтобы вызвать JavaScript, который вставлен в index.html файл:

<!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>

Теперь, когда я пытаюсь загрузить index.html в qtwebkit:

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

я могу увидеть это index.html был загружен нормально (я вижу 2 кнопки)
При нажатии на кнопку, которая должна вызывать локальный (html embeded) javascript, он работает.
Нажатие на вторую кнопку ничего не делает.

Похоже на внешний assets.js не загружен должным образом.
Любые предположения, как я могу заставить это работать?

Благодарю.

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 и установите baseUrl в setHtml, чтобы правильно связать все файлы:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]