Qt QWebEngineView не может найти файл javascript в выпуске, но в отладке - PullRequest
1 голос
/ 05 июля 2019

Используя googlemap с QWebEngineView, я хотел бы добавить myscript.js в html-файл. Это работает очень хорошо в отладке, но не в выпуске. В режиме выпуска myscript.js не найден с ошибкой js: Uncaught (в обещании) ReferenceError: myscriptNameSpace не определено

Я работаю с Qt 5.12.2, MSVC 2017

мой файл qrc

<RCC>
    <qresource prefix="/">
        <file>html/googlemap.html</file>
        <file>js/myscript.js</file>
    </qresource>
</RCC>

мой .h файл

class GoogleMapWebEngine : public QWidget
{
    Q_OBJECT

public:
    explicit GoogleMapWebEngine(QWidget *parent = nullptr);
    virtual ~GoogleMapWebEngine() override;

protected:
    virtual void wheelEvent(QWheelEvent * event) override;

private:
    Ui::GoogleMapWebEngine *ui;
    QWebEngineView* m_webview;
    QWebChannel* m_webChannel;
};

мой .cpp файл

GoogleMapWebEngine::GoogleMapWebEngine(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::GoogleMapWebEngine)
{
    qputenv("QTWEBENGINE_REMOTE_DEBUGGING", "1234");
    ui->setupUi(this);

    m_webview = new QWebEngineView();
    m_webChannel = new QWebChannel();
    m_webChannel->registerObject("goolemainWindow", this);
    m_webview->page()->setWebChannel(m_webChannel);

    QUrl url = QUrl("qrc:/html/googlemap.html");
    m_webview->setUrl(url);
    ui->verticalLayout->addWidget(m_webview);
}

мой файл googlemap.html

<html>
    <head>
        ...
        <script src="qrc:/js/myscript.js"></script>

        <script type="text/javascript">           
            function initMap()
            {
                var
                    mapCenter = [32.794488, -96.780372],
                    mapOptions = {
                        zoom: 18,
                        center: new google.maps.LatLng(mapCenter[0], mapCenter[1]),
                        mapTypeId: google.maps.MapTypeId.SATELLITE

                    },
                    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
                    myscriptNameSpace.test();
            }
        </script>        
    </head>

    <body ondragstart="return false">
        <div id="map-canvas" />
        <script async defer src="https://maps.googleapis.com/maps/api/js?key=myKey&callback=initMap"></script>
    </body>
</html>

myscript.js

var myscriptNameSpace = {}
myscriptNameSpace.test = function(){
    alert('test');
}

Ожидается: должно отображаться предупреждение

Текущая ошибка: js: Uncaught (в обещании) ReferenceError: myscriptNameSpace не определено

Мой полный исходный код находится здесь: github.com / hunglxtp / googlemapTest

1 Ответ

1 голос
/ 08 июля 2019

Я наконец нашел проблему из документации qt . Мое решение состоит в том, чтобы добавить: QTQUICK_COMPILER_SKIPPED_RESOURCES += testgooglemapwebengine.qrc в .pro файл.

...