LINUX.ORG.RU

Не работает JS код в QtWebkit

 , ,


0

1

Использую 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_())
Qt 5.9.5/5.10.1, Python 3.6.5. Также установлен libqt5webkit5-5.212.0~alpha2

Кто-нибудь сталкивался с подобной ситуацией, когда JS не работает? В чем причина? Может есть workaround'ы или список неподдерживаемых возможностей JS. Гуглил, но нашел только разрозненные упоминания, что QtWebKit не полностью ECMA-compliant.


Ответ на: комментарий от former_anonymous

Ошибки вида

https://cdn.3dmapping.cloud/18.1.4/javascript/orbitgt_3dm_sdk.js line 1: TypeError: a.call is not a function. (In 'a.call(this,t,e,n,r)', 'a.call' is an instance of ProxyObject)
Т.е. в самом начале что-то не так идет. А так как функционал там достаточно хитрый, боюсь дальше тоже будут ошибки.

К сожалению, QWebEngine использовать нет возможности — в целевой среде он недоступен.

sergs ()
Ответ на: комментарий от sergs

в целевой среде он недоступен

будь мужиком - собери вебэнджин для целевой среды сам! :)

это нестрашно - перед сном запускаешь, утром просыпаешься - всё готово ;)

aol ★★★★★ ()
Ответ на: комментарий от aol

будь мужиком - собери вебэнджин для целевой среды сам! :)

Если ли бы эта среда была в одном экземпляре — так бы и сделал. В конце-концов я ведь в какой-то степени мужик :-). Но увы, там зоопарк из разных платформ, версий Qt и версий основного приложения.

Единственный вариант — попытаться пропихнуть в upstream зависимость от QWebEngine, этим уже занимаюсь.

sergs ()