Использую QtWebkit (точнее QWebView) для отображения HTML файла с JS. Файл загружается, но на этом все: нажатия на кнопки не обрабатываются, в консоли вал ошибок. При этом в браузерах Firefox/Chromium/Edge этот же файл открывается и работает. Т.е. либо я что-то делаю не так, либо в QWebView отсутствует поддержка некоторых фич JS.
Вот HTML
<html>
<head>
<script type="text/javascript" src="https://cdn.3dmapping.cloud/18.1.4/javascript/orbitgt_3dm_sdk.js"></script>
</head>
<body >
<div id="app">
<script type="text/javascript">
var viewer;
function handleReady() {
viewer.setSize(600,400);
}
function handleDOMReady() {
var applicationName = "QGIS Orbit plugin";
var appElement = document.getElementById("m3dviewer");
viewer = new orbitgt.mapping3d.sdk.viewer.SDKViewer(applicationName, appElement);
viewer.isReady.then(handleReady);
}
document.addEventListener("DOMContentLoaded", handleDOMReady);
</script>
<div id="m3dviewer"/>
</body>
</html>
Вот код на Python для быстрой проверки
import os
import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebKit import QWebSettings
from PyQt5.QtWebKitWidgets import QWebView, QWebInspector, QWebPage
filePath = os.path.abspath(os.path.join(os.path.dirname(__file__), 'index.html'))
class LoggedPage(QWebPage):
def javaScriptConsoleMessage(self, msg, line, source):
print ('JS: %s line %d: %s' % (source, line, msg))
app = QApplication(sys.argv)
webView = QWebView()
page = LoggedPage()
webView.setPage(page)
settings = webView.settings()
settings.setAttribute(QWebSettings.PluginsEnabled, True)
settings.setAttribute(QWebSettings.WebGLEnabled, True)
settings.setAttribute(QWebSettings.Accelerated2dCanvasEnabled, True)
settings.setAttribute(QWebSettings.DeveloperExtrasEnabled, True)
inspector = QWebInspector()
inspector.setPage(webView.page())
webView.load(QUrl.fromLocalFile(filePath))
webView.show()
sys.exit(app.exec_())
Кто-нибудь сталкивался с подобной ситуацией, когда JS не работает? В чем причина? Может есть workaround'ы или список неподдерживаемых возможностей JS. Гуглил, но нашел только разрозненные упоминания, что QtWebKit не полностью ECMA-compliant.