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
QtWS25 Last Chance

Get confirmation that a key has reached JS

Scheduled Pinned Locked Moved Solved Qt WebKit
webview webkitjscriptkeyevent
33 Posts 4 Posters 12.5k Views
  • 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.
  • K Konstantin Tokarev

    @McLion You can set up handler for keydown or keypress in your JS code and send messages to console

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

    @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 1 Reply Last reply
    0
    • 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

                                          • Login

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