Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt WebKit
  4. Get confirmation that a key has reached JS
Forum Updated to NodeBB v4.3 + New Features

Get confirmation that a key has reached JS

Scheduled Pinned Locked Moved Solved Qt WebKit
webview webkitjscriptkeyevent
33 Posts 4 Posters 13.6k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • McLionM McLion

    @Konstantin-Tokarev

    Should something like the 2 console.log lines below give me some output on the console?
    Excerpt from JS code:

    case(event.keyCode >= 65 && event.keyCode <= 73): /* a..i */
                        var index = 0;
                        var rowNum = event.keyCode - 65;
                        var jBottommenuRows = $(this).children('.row');
                        console.log("JS");
                        console.log(event.keyCode);
    
    K Offline
    K Offline
    Konstantin Tokarev
    wrote on last edited by
    #5

    @McLion Yes

    McLionM 1 Reply Last reply
    0
    • K Konstantin Tokarev

      @McLion Yes

      McLionM Offline
      McLionM Offline
      McLion
      wrote on last edited by
      #6

      @Konstantin-Tokarev

      OK, fine. What if there is nothing ... on the very same console all qDebug() perfectly appear?

      K 1 Reply Last reply
      0
      • McLionM McLion

        @Konstantin-Tokarev

        OK, fine. What if there is nothing ... on the very same console all qDebug() perfectly appear?

        K Offline
        K Offline
        Konstantin Tokarev
        wrote on last edited by
        #7

        @McLion No, they go to JS console. You can see it in Inspector, or handle QWebPage::javaScriptConsoleMessage signal

        McLionM 1 Reply Last reply
        0
        • K Konstantin Tokarev

          @McLion No, they go to JS console. You can see it in Inspector, or handle QWebPage::javaScriptConsoleMessage signal

          McLionM Offline
          McLionM Offline
          McLion
          wrote on last edited by
          #8

          @Konstantin-Tokarev

          Ahhh ... OK ... Thanks a lot.
          Never saw the 'Inspector' and will try to read it up ... is it also part of webKit in Qt?
          I know the inspector on desktop browser but it won't help because it unfortunately does not show the issue there.
          I'll try (tomorrow) to connect the signal to a slot and use qDebug() in there.

          McLionM 1 Reply Last reply
          0
          • McLionM McLion

            @Konstantin-Tokarev

            Ahhh ... OK ... Thanks a lot.
            Never saw the 'Inspector' and will try to read it up ... is it also part of webKit in Qt?
            I know the inspector on desktop browser but it won't help because it unfortunately does not show the issue there.
            I'll try (tomorrow) to connect the signal to a slot and use qDebug() in there.

            McLionM Offline
            McLionM Offline
            McLion
            wrote on last edited by
            #9

            @McLion
            Activated the inspector with the following line:
            QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
            Basically works. However, as soon as I have the inspector turned on my webView's do behave very strange, like they do not get all inputs anymore, and I can not debug the situation.

            Looks like I need to implement QWebPage::javaScriptConsoleMessage and send the messages back to C++ and debug from there.
            According docs this is not a signal so I can not simply connect to it.

            K 1 Reply Last reply
            0
            • McLionM McLion

              @McLion
              Activated the inspector with the following line:
              QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);
              Basically works. However, as soon as I have the inspector turned on my webView's do behave very strange, like they do not get all inputs anymore, and I can not debug the situation.

              Looks like I need to implement QWebPage::javaScriptConsoleMessage and send the messages back to C++ and debug from there.
              According docs this is not a signal so I can not simply connect to it.

              K Offline
              K Offline
              Konstantin Tokarev
              wrote on last edited by
              #10

              @McLion Right, I've mixed it up with new consoleMessageReceived() signal that is present in revived QtWebKit only (since TP3)

              McLionM 1 Reply Last reply
              1
              • K Konstantin Tokarev

                @McLion Right, I've mixed it up with new consoleMessageReceived() signal that is present in revived QtWebKit only (since TP3)

                McLionM Offline
                McLionM Offline
                McLion
                wrote on last edited by
                #11

                @Konstantin-Tokarev
                Need some help ...
                I have the following:
                in h:

                #include <QWebPage>
                class DBGWebPage : public QWebPage
                {
                Q_OBJECT
                  public:
                    explicit DBGWebPage(QObject *parent = 0);
                  protected:
                    void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                };
                

                in cpp:

                void DBGWebPage::javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID )
                {
                  qDebug() << message << lineNumber << sourceID;
                }
                

                and my webGUI's are derived from qWebView:

                QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                

                How do I make it use the reimplementation of javaScriptConsoleMessage()?

                K 1 Reply Last reply
                0
                • McLionM McLion

                  @Konstantin-Tokarev
                  Need some help ...
                  I have the following:
                  in h:

                  #include <QWebPage>
                  class DBGWebPage : public QWebPage
                  {
                  Q_OBJECT
                    public:
                      explicit DBGWebPage(QObject *parent = 0);
                    protected:
                      void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                  };
                  

                  in cpp:

                  void DBGWebPage::javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID )
                  {
                    qDebug() << message << lineNumber << sourceID;
                  }
                  

                  and my webGUI's are derived from qWebView:

                  QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                  

                  How do I make it use the reimplementation of javaScriptConsoleMessage()?

                  K Offline
                  K Offline
                  Konstantin Tokarev
                  wrote on last edited by
                  #12

                  @McLion QWebView::setPage

                  McLionM 2 Replies Last reply
                  0
                  • K Konstantin Tokarev

                    @McLion QWebView::setPage

                    McLionM Offline
                    McLionM Offline
                    McLion
                    wrote on last edited by
                    #13

                    @Konstantin-Tokarev
                    Thanks .. seems to be too late for today ... I don't get it to build ... dam...

                    1 Reply Last reply
                    0
                    • K Konstantin Tokarev

                      @McLion QWebView::setPage

                      McLionM Offline
                      McLionM Offline
                      McLion
                      wrote on last edited by
                      #14

                      @Konstantin-Tokarev
                      There's something I don't get ... probably soemthing with these C++ classes I'm always stumbling over:

                      #include <QWebPage>
                      class DBGWebPage : public QWebPage
                      {
                      Q_OBJECT
                        public:
                          explicit DBGWebPage(QObject *parent = 0);
                          QWebPage *DebugWebPage;
                        protected:
                          void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                      };
                      
                      DBGWebPage::DBGWebPage(QObject *parent) :
                        QWebPage(parent)
                      {
                        //QWebPage* DebugWebPage = new QWebPage;
                        DebugWebPage = new QWebPage(this);
                      }
                      
                      QWebView * QTGUI_MainWindow::CreateNewWebGUI(int iID)
                      {
                        // check if already existing
                        if(webGUIMap.value(iID) != 0) { qDebug("GUI %d existing", iID); return false; }
                      
                        // check for max GUI count here
                        if(iID > GUI_COUNT_MAX) { qDebug("GUI %d failed - Max GUI ID is %d", iID, GUI_COUNT_MAX); return false; }
                      
                        // create new webGUI and add it to the list
                        QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                        webGUIMap.insert(iID, webGUI);
                      
                        // make some basic settings to the new GUI
                        webGUI->setPage(DBGWebPage::DebugWebPage);
                        webGUI->setObjectName(QString::fromUtf8("webGUI%1").arg(iID));
                      ......
                      

                      Fehler:object missing in reference to 'DBGWebPage::DebugWebPage'

                      K mrjjM 3 Replies Last reply
                      0
                      • McLionM McLion

                        @Konstantin-Tokarev
                        There's something I don't get ... probably soemthing with these C++ classes I'm always stumbling over:

                        #include <QWebPage>
                        class DBGWebPage : public QWebPage
                        {
                        Q_OBJECT
                          public:
                            explicit DBGWebPage(QObject *parent = 0);
                            QWebPage *DebugWebPage;
                          protected:
                            void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                        };
                        
                        DBGWebPage::DBGWebPage(QObject *parent) :
                          QWebPage(parent)
                        {
                          //QWebPage* DebugWebPage = new QWebPage;
                          DebugWebPage = new QWebPage(this);
                        }
                        
                        QWebView * QTGUI_MainWindow::CreateNewWebGUI(int iID)
                        {
                          // check if already existing
                          if(webGUIMap.value(iID) != 0) { qDebug("GUI %d existing", iID); return false; }
                        
                          // check for max GUI count here
                          if(iID > GUI_COUNT_MAX) { qDebug("GUI %d failed - Max GUI ID is %d", iID, GUI_COUNT_MAX); return false; }
                        
                          // create new webGUI and add it to the list
                          QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                          webGUIMap.insert(iID, webGUI);
                        
                          // make some basic settings to the new GUI
                          webGUI->setPage(DBGWebPage::DebugWebPage);
                          webGUI->setObjectName(QString::fromUtf8("webGUI%1").arg(iID));
                        ......
                        

                        Fehler:object missing in reference to 'DBGWebPage::DebugWebPage'

                        K Offline
                        K Offline
                        Konstantin Tokarev
                        wrote on last edited by
                        #15
                        This post is deleted!
                        1 Reply Last reply
                        0
                        • McLionM McLion

                          @Konstantin-Tokarev
                          There's something I don't get ... probably soemthing with these C++ classes I'm always stumbling over:

                          #include <QWebPage>
                          class DBGWebPage : public QWebPage
                          {
                          Q_OBJECT
                            public:
                              explicit DBGWebPage(QObject *parent = 0);
                              QWebPage *DebugWebPage;
                            protected:
                              void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                          };
                          
                          DBGWebPage::DBGWebPage(QObject *parent) :
                            QWebPage(parent)
                          {
                            //QWebPage* DebugWebPage = new QWebPage;
                            DebugWebPage = new QWebPage(this);
                          }
                          
                          QWebView * QTGUI_MainWindow::CreateNewWebGUI(int iID)
                          {
                            // check if already existing
                            if(webGUIMap.value(iID) != 0) { qDebug("GUI %d existing", iID); return false; }
                          
                            // check for max GUI count here
                            if(iID > GUI_COUNT_MAX) { qDebug("GUI %d failed - Max GUI ID is %d", iID, GUI_COUNT_MAX); return false; }
                          
                            // create new webGUI and add it to the list
                            QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                            webGUIMap.insert(iID, webGUI);
                          
                            // make some basic settings to the new GUI
                            webGUI->setPage(DBGWebPage::DebugWebPage);
                            webGUI->setObjectName(QString::fromUtf8("webGUI%1").arg(iID));
                          ......
                          

                          Fehler:object missing in reference to 'DBGWebPage::DebugWebPage'

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #16

                          Hi
                          webGUI->setPage(DBGWebPage::DebugWebPage);
                          I would expect be something like
                          DBGWebPage *page=new DBGWebPage();
                          webGUI->setPage(page->DebugWebPage);

                          The other syntax seems odd ?

                          McLionM 1 Reply Last reply
                          0
                          • McLionM McLion

                            @Konstantin-Tokarev
                            There's something I don't get ... probably soemthing with these C++ classes I'm always stumbling over:

                            #include <QWebPage>
                            class DBGWebPage : public QWebPage
                            {
                            Q_OBJECT
                              public:
                                explicit DBGWebPage(QObject *parent = 0);
                                QWebPage *DebugWebPage;
                              protected:
                                void javaScriptConsoleMessage( const QString & message, int lineNumber, const QString & sourceID );
                            };
                            
                            DBGWebPage::DBGWebPage(QObject *parent) :
                              QWebPage(parent)
                            {
                              //QWebPage* DebugWebPage = new QWebPage;
                              DebugWebPage = new QWebPage(this);
                            }
                            
                            QWebView * QTGUI_MainWindow::CreateNewWebGUI(int iID)
                            {
                              // check if already existing
                              if(webGUIMap.value(iID) != 0) { qDebug("GUI %d existing", iID); return false; }
                            
                              // check for max GUI count here
                              if(iID > GUI_COUNT_MAX) { qDebug("GUI %d failed - Max GUI ID is %d", iID, GUI_COUNT_MAX); return false; }
                            
                              // create new webGUI and add it to the list
                              QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                              webGUIMap.insert(iID, webGUI);
                            
                              // make some basic settings to the new GUI
                              webGUI->setPage(DBGWebPage::DebugWebPage);
                              webGUI->setObjectName(QString::fromUtf8("webGUI%1").arg(iID));
                            ......
                            

                            Fehler:object missing in reference to 'DBGWebPage::DebugWebPage'

                            K Offline
                            K Offline
                            Konstantin Tokarev
                            wrote on last edited by
                            #17

                            @McLion You derive DBGWebPage from QWebPage and add QWebPage* field to it, then try to use that QWebPage* field (which is vanilla QWebPage, not DBGWebPage) as it was static filed of DBGWebPage.

                            1 Reply Last reply
                            0
                            • mrjjM mrjj

                              Hi
                              webGUI->setPage(DBGWebPage::DebugWebPage);
                              I would expect be something like
                              DBGWebPage *page=new DBGWebPage();
                              webGUI->setPage(page->DebugWebPage);

                              The other syntax seems odd ?

                              McLionM Offline
                              McLionM Offline
                              McLion
                              wrote on last edited by McLion
                              #18

                              @mrjj
                              Thanks.
                              In fact, the other syntax seemed wrong.
                              You code builds without error, however, crashes with SIGSEGV.

                              K 1 Reply Last reply
                              0
                              • McLionM McLion

                                @mrjj
                                Thanks.
                                In fact, the other syntax seemed wrong.
                                You code builds without error, however, crashes with SIGSEGV.

                                K Offline
                                K Offline
                                Konstantin Tokarev
                                wrote on last edited by
                                #19

                                @McLion Because it should be

                                DBGWebPage *page=new DBGWebPage();
                                webGUI->setPage(page);

                                1 Reply Last reply
                                0
                                • McLionM Offline
                                  McLionM Offline
                                  McLion
                                  wrote on last edited by
                                  #20

                                  I somehow understand all you're saying, but I so far am not able to modify my code to not crash.
                                  Currently ended up with (modified to it while Konstantin was writing it too):

                                  DBGWebPage *page=new DBGWebPage();
                                  webGUI->setPage(page);
                                  

                                  and an empty constructor.
                                  Still crashing .... I'm stumped.

                                  1 Reply Last reply
                                  0
                                  • K Offline
                                    K Offline
                                    Konstantin Tokarev
                                    wrote on last edited by
                                    #21

                                    remove DebugWebPage and all code messing with it

                                    McLionM 1 Reply Last reply
                                    0
                                    • McLionM Offline
                                      McLionM Offline
                                      McLion
                                      wrote on last edited by
                                      #22

                                      Found something.
                                      It actually works if comment 2 signal connects for the page, but I need these two.

                                      • networkAccessManager for SSL errors
                                      • and the JS bridge
                                        If the page has been set, do I need to connect these in a different way or do these now go to the wrong object?
                                      QWebView * QTGUI_MainWindow::CreateNewWebGUI(int iID)
                                      {
                                        // check if already existing
                                        if(webGUIMap.value(iID) != 0) { qDebug("GUI %d existing", iID); return false; }
                                      
                                        // check for max GUI count here
                                        if(iID > GUI_COUNT_MAX) { qDebug("GUI %d failed - Max GUI ID is %d", iID, GUI_COUNT_MAX); return false; }
                                      
                                        // create new webGUI and add it to the list
                                        QWebView *webGUI = new QWebView(QTGUI_MainWindow::centralWidget());
                                        webGUIMap.insert(iID, webGUI);
                                      
                                        // make some basic settings to the new GUI
                                      DBGWebPage *page=new DBGWebPage();
                                      webGUI->setPage(page);
                                      
                                        webGUI->setObjectName(QString::fromUtf8("webGUI%1").arg(iID));
                                      //qDebug() << "New webGUI:" << webGUI;
                                      //qDebug() << "Map:" << iID << webGUIMap.value(iID);
                                        webGUI->setStyleSheet(QString::fromUtf8("background-color: rgba(0, 0, 0, 0);"));
                                        webGUI->setUrl(QUrl("about:blank"));
                                        webGUI->setRenderHints(QPainter::SmoothPixmapTransform|QPainter::TextAntialiasing);
                                        webGUI->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
                                        webGUI->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
                                        webGUI->setGeometry(0, 0, SCREEN_SIZE_X, SCREEN_SIZE_Y);
                                        webGUI->setFocusPolicy(Qt::StrongFocus);
                                        webGUI->setMouseTracking(true);
                                        webGUI->setAcceptDrops(true);
                                        webGUIeventFilter *webGUIEvFil = new webGUIeventFilter;
                                        webGUI->installEventFilter(webGUIEvFil);
                                        webGUI->hide();
                                      
                                        // connect load progress and finished signals
                                        connect(webGUI, SIGNAL(loadProgress(int)), ui->webGUIChangeProgressBar, SLOT(setValue(int)));
                                        connect(webGUI, SIGNAL(loadFinished(bool)), this, SLOT(webGUI_loadFinished(bool)));
                                      
                                        // prepare adding objects to JavaScript (bridge from JS to native code)
                                      //  connect(webGUI->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(populateJavaScriptWindowObject()));
                                      
                                        // setup SSL error handling
                                      //  connect(webGUI->page()->networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> & )),
                                      //  this, SLOT(HandleGUIsslErrors(QNetworkReply*, const QList<QSslError> & )));
                                      
                                        return webGUI;
                                      }
                                      
                                      1 Reply Last reply
                                      0
                                      • K Konstantin Tokarev

                                        remove DebugWebPage and all code messing with it

                                        McLionM Offline
                                        McLionM Offline
                                        McLion
                                        wrote on last edited by
                                        #23

                                        @Konstantin-Tokarev
                                        Did so - all removed.

                                        1 Reply Last reply
                                        0
                                        • McLionM Offline
                                          McLionM Offline
                                          McLion
                                          wrote on last edited by McLion
                                          #24

                                          I can not find what I'm doing wrong. The console debug works, as long as I have deactivated the JS bridge.

                                          DBGWebPage *page=new DBGWebPage();
                                          webGUI->setPage(page);
                                          // the following lines that use the new page seem to work
                                          webGUI->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
                                          webGUI->page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
                                          // and the following line - that I need - let it crash upon boot:
                                          connect(webGUI->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(populateJavaScriptWindowObject()));
                                          

                                          If I don't use setPage() to change the page that the webView generates by default, the JS bridge works perfectly.
                                          What am I doing wrong to use the page of my own class with the debug added AND use the JS bridge?

                                          A 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved