QWebEngineView can not find javascript file in release but ok in Debug



  • Using googlemap with QWebEngineView, i would like to add myscript.js in the html file. It works very well in debug, but not in release. In release mode, myscript.js is not found with error js: Uncaught (in promise) ReferenceError: myscriptNameSpace is not defined

    I'm working with Qt 5.12.2, MSVC 2017

    my qrc file

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

    my .h file

    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;
    };
    

    my .cpp file

    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);
    }
    

    my googlemap.html file

    <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');
    }
    

    Expected : Alert messagae ‘test’ must be displayed

    But have error in console in release : js: Uncaught (in promise) ReferenceError: myscriptNameSpace is not defined

    My full source code is found here : github.com/hunglxtp/googlemapTest



  • I finally found the problème from qt documentation.
    My solution is to add : QTQUICK_COMPILER_SKIPPED_RESOURCES += testgooglemapwebengine.qrc in my .pro file.