Get confirmation that a key has reached JS
-
wrote on 12 Dec 2016, 15:28 last edited by
Hi
I have a strange issue that on every second use of key used to navigate in a webView with JS, it simply does not react on it.
I've added an event viewer to the webView to filter and debug key events received and it shows the key press as well as the release event coming in.
So far, everything seems OK as far as I can reach it 'code-wise'.
How can I be sure the key reaches the JS code to tell where to look for this issue (my code, behavior of webKit, PHP, JS on server ....)?Thanks for any input to track this down.
McL -
Hi
I have a strange issue that on every second use of key used to navigate in a webView with JS, it simply does not react on it.
I've added an event viewer to the webView to filter and debug key events received and it shows the key press as well as the release event coming in.
So far, everything seems OK as far as I can reach it 'code-wise'.
How can I be sure the key reaches the JS code to tell where to look for this issue (my code, behavior of webKit, PHP, JS on server ....)?Thanks for any input to track this down.
McLwrote on 12 Dec 2016, 16:02 last edited by@McLion You can set up handler for keydown or keypress in your JS code and send messages to console
-
wrote on 12 Dec 2016, 16:12 last edited by
Thanks.
Sounds like a plan ... going to try and post back. -
@McLion You can set up handler for keydown or keypress in your JS code and send messages to console
wrote on 12 Dec 2016, 16:37 last edited byShould 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);
-
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);
wrote on 12 Dec 2016, 16:41 last edited by@McLion Yes
-
wrote on 12 Dec 2016, 16:43 last edited by
OK, fine. What if there is nothing ... on the very same console all qDebug() perfectly appear?
-
OK, fine. What if there is nothing ... on the very same console all qDebug() perfectly appear?
wrote on 12 Dec 2016, 16:44 last edited by@McLion No, they go to JS console. You can see it in Inspector, or handle QWebPage::javaScriptConsoleMessage signal
-
@McLion No, they go to JS console. You can see it in Inspector, or handle QWebPage::javaScriptConsoleMessage signal
wrote on 12 Dec 2016, 16:50 last edited byAhhh ... 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. -
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.wrote on 13 Dec 2016, 14:29 last edited by@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. -
@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.wrote on 13 Dec 2016, 14:31 last edited by@McLion Right, I've mixed it up with new consoleMessageReceived() signal that is present in revived QtWebKit only (since TP3)
-
@McLion Right, I've mixed it up with new consoleMessageReceived() signal that is present in revived QtWebKit only (since TP3)
wrote on 13 Dec 2016, 15:42 last edited by@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()?
-
@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()?
wrote on 13 Dec 2016, 15:44 last edited by@McLion QWebView::setPage
-
@McLion QWebView::setPage
wrote on 13 Dec 2016, 16:24 last edited by@Konstantin-Tokarev
Thanks .. seems to be too late for today ... I don't get it to build ... dam... -
@McLion QWebView::setPage
wrote on 13 Dec 2016, 16:53 last edited by@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'
-
@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'
wrote on 13 Dec 2016, 16:54 last edited byThis post is deleted! -
@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'
Hi
webGUI->setPage(DBGWebPage::DebugWebPage);
I would expect be something like
DBGWebPage *page=new DBGWebPage();
webGUI->setPage(page->DebugWebPage);The other syntax seems odd ?
-
@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'
wrote on 13 Dec 2016, 17:05 last edited by@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.
-
Hi
webGUI->setPage(DBGWebPage::DebugWebPage);
I would expect be something like
DBGWebPage *page=new DBGWebPage();
webGUI->setPage(page->DebugWebPage);The other syntax seems odd ?
-
@mrjj
Thanks.
In fact, the other syntax seemed wrong.
You code builds without error, however, crashes with SIGSEGV.wrote on 13 Dec 2016, 17:21 last edited by@McLion Because it should be
DBGWebPage *page=new DBGWebPage();
webGUI->setPage(page); -
wrote on 13 Dec 2016, 17:24 last edited by
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/33