1. На днях понадобилось получать HTML из WebKit (LCL WebKit Demo можно скачать в конце веб-страницы по интернет адресу: http://users.telenet.be/Jan.Van.hijfte/qtforfpc/fpcqt4.html, его и будем изменять).
2. Хоть и написано, что Qt 4.5 и Qt 4.7 бинарно совместимы, но всё же что бы WebKit начал нормально работать (показывать часть изображений) нужно использовать Qt 4.5.3 (релиз октября 2009): http://get.qt.nokia.com/qt/source/qt-win-opensource-4.5.3-mingw.exe.
3. Включим некоторые настройки WebKit:
Код: Выделить всё
QWebSettings_setAttribute(QWebSettings, QWebSettingsAutoLoadImages, True);
QWebSettings_setAttribute(QWebSettings, QWebSettingsPluginsEnabled, True); 4. Согласно документации нам нужно получить у текущего WebView его страницу и извлечь у данной страницы её фрейм из которой потом можно получить содержимое загруженной в WebView страницы. На C++ это выглядело бы приблизительно вот так:
Код: Выделить всё
QWebFrame* MyFrame = webView->page()->mainFrame(); 5. Первым делом объявим переменную типа QWebFrame, в FreePascal (Lazarus) она имеет дополнительное окончание - H.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
QWebFrame* MyFrame6. Получим у текущего WebView его страницу. В изменяемом нами примере необходимо перенести QWebView: QLCLWebViewH из секции private в секцию public класса TWebPanel. Так как в FreePascal (Lazarus) мы обращаемся к библиотеке Qt через стороннюю *.dll то получение свойств класса производится не напрямую, а через специальные процедуры.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
webView->page()На FreePascal (Lazarus):
Код: Выделить всё
QWebView_page(ActiveTab.QWebView);7. Получим фрейм страницы.
На C++ это выглядело бы приблизительно вот так (часть кода из п.4):
Код: Выделить всё
MyFrame = webView->page()->mainFrame();На FreePascal (Lazarus):
Код: Выделить всё
MyFrame := QWebPage_mainFrame(QWebView_page(ActiveTab.QWebView));8. Теперь получим HTML.
Код: Выделить всё
var
FUrl: WideString;
...
QWebFrame_toHtml(MyFrame, @FUrl);
Memo.Lines.Add(UTF8Encode(FUrl));
...9. Теперь руками можно реализовать диалог сохранения файла и при сохранении скачать и сохранить все дополнительные файлы к HTML в виде изображений, css и т.п.
Надеюсь это кому нибудь пригодиться.
