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

Get confirmation that a key has reached JS

Scheduled Pinned Locked Moved Solved Qt WebKit
webview webkitjscriptkeyevent
33 Posts 4 Posters 12.6k 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.
  • McLionM Offline
    McLionM Offline
    McLion
    wrote on last edited by
    #3

    Thanks.
    Sounds like a plan ... going to try and post back.

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

                                          • Login

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