[Interest] Handle frames and web forms with QWebEngine
NoRulez
norulez at me.com
Wed Dec 2 10:36:28 CET 2015
If someone is interested. I found a solution which avoid the use of QWebEngine/QWebChannel and JavaScript stuff and is a lot more easy and straight forward to use.
connect(m_pWebEngineView, &QWebEngineView::loadFinished, [=]() {
m_pWebEngineView->page()->runJavaScript("window.frames[\"MyFrame\"].document.body.innerHTML", [=](const QVariant &var) {
const QString content = var.toString();
// Parse the content with QRegularExpression
// Here the following options are useful: QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
});
});
Best regards
> Am 27.11.2015 um 09:48 schrieb Koehne Kai <Kai.Koehne at theqtcompany.com>:
>
>
>
>> -----Original Message-----
>> From: NoRulez [mailto:norulez at me.com]
>> Sent: Friday, November 27, 2015 9:35 AM
>> To: Koehne Kai <Kai.Koehne at theqtcompany.com>
>> Cc: Qt Project MailingList <interest at qt-project.org>
>> Subject: Re: [Interest] Handle frames and web forms with QWebEngine
>>
>> This is not my tree, it's a simple webpage/webform. But it seems that the new
>> "webengine" can't handle simple tasks like this.
>
> I think I already mentioned several approaches to do this.
>
>> I don't think that the following statement is too complex:
>> document.getElementsByTagName('input')
>
> The statement itself is not complex. What it returns might be too complex for a simple transformation into a QVariant, though.
>
> Regards
>
> Kai
>
>> Best regards
>>
>>>> Am 25.11.2015 um 13:08 schrieb Koehne Kai
>>> <Kai.Koehne at theqtcompany.com>:
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: NoRulez [mailto:norulez at me.com]
>>>> Sent: Tuesday, November 24, 2015 2:37 PM
>>>> To: Koehne Kai <Kai.Koehne at theqtcompany.com>
>>>> Cc: Qt Project MailingList <interest at qt-project.org>
>>>> Subject: Re: [Interest] Handle frames and web forms with QWebEngine
>>>>
>>>> No one?
>>>>
>>>> Isn't it supported to return simple objects?
>>>
>>> The code that does the transformation can be found in
>> web_contents_adapter.cpp, function fromJSValue():
>>>
>>> http://code.woboq.org/qt5/qtwebengine/src/core/web_contents_adapter.cp
>>> p.html
>>>
>>> Not sure how the JS representation of your tree is.
>>>
>>> A possible workaround might be to serialize the data structures, and return a
>> JSON string (e.g. by using JSON.stringify()).
>>>
>>> Regards
>>>
>>> Kai
>>>
>>>> Best Regards
>>>>
>>>>
>>>>> Am 19.11.2015 um 17:29 schrieb NoRulez <norulez at me.com>:
>>>>>
>>>>> I tried to use m_pWebEngineView->page()->runJavaScript() after the
>>>>> site is
>>>> loaded, but it returns QVariant(QVariantMap, QMap()) for most of the time.
>>>>>
>>>>> It seems that it can handle only simple queries like
>>>>> "document.title" but not for
>>>> example "window.frames['MyFrame].document.forms[0].elements".
>>>>> With which I expect a list of maps or similar to get the form elements.
>>>>>
>>>>> Best Regards
>>>>>
>>>>>> Am 18.11.2015 um 16:40 schrieb Koehne Kai
>>>> <Kai.Koehne at theqtcompany.com>:
>>>>>>
>>>>>>
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: NoRulez [mailto:norulez at me.com]
>>>>>>> Sent: Wednesday, November 18, 2015 12:20 PM
>>>>>>> To: Koehne Kai <Kai.Koehne at theqtcompany.com>
>>>>>>> Cc: Qt Project MailingList <interest at qt-project.org>
>>>>>>> Subject: Re: [Interest] Handle frames and web forms with
>>>>>>> QWebEngine
>>>>>>>
>>>>>>> Is there an example for such approach?
>>>>>>
>>>>>> Probably not for your specific request, but there's the 'fancybrowser'
>>>> example that shows how to inject JavaScript:
>>>>>>
>>>>>> https://doc-snapshots.qt.io/qt5-5.6/qtwebengine-webenginewidgets-fa
>>>>>> nc
>>>>>> ybrowser-example.html
>>>>>>
>>>>>> We recently also just added a 'markdowneditor' example
>>>>>> demonstrating the
>>>> use of QWebChannel:
>>>>>>
>>>>>> https://doc-snapshots.qt.io/qt5-5.6/qtwebengine-webenginewidgets-ma
>>>>>> rk
>>>>>> downeditor-example.html
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>> Kai
>>>>>>
>>>>>>
>>>>>>>>> Am 18.11.2015 um 10:12 schrieb Koehne Kai
>>>>>>>> <Kai.Koehne at theqtcompany.com>:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: Interest [mailto:interest-bounces at qt-project.org] On
>>>>>>>>> Behalf Of NoRulez
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> What is the preferred way to handle web forms (iterate over it
>>>>>>>>> like QWebCollection does in QWebKit), search for frames by name
>>>>>>>>> and get notified when a frame is created? (Was a signal in
>>>>>>>>> QWebKit)
>>>>>>>>
>>>>>>>> The general approach is to load/inject JavaScript into the page
>>>>>>>> that takes care
>>>>>>> of this, and communicates with the C++ world either by return
>>>>>>> value, or QWebChannel.
>>>>>>>>
>>>>>>>> Hope this helps,
>>>>>>>>
>>>>>>>> Kai
>>>>> _______________________________________________
>>>>> Interest mailing list
>>>>> Interest at qt-project.org
>>>>> http://lists.qt-project.org/mailman/listinfo/interest
More information about the Interest
mailing list