Это дополнительный вопрос от Как отладить WebKit2GTK + расширения .Хотя там есть больше кода для справки, я немного его изменил.
У меня есть следующее расширение веб-набора:
#include <webkit2/webkit-web-extension.h>
#include <iostream>
static void web_page_created_callback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer userData)
{
std::cout << "Page " << webkit_web_page_get_id(webPage) << " created for " << webkit_web_page_get_uri(webPage) << "\n";
g_print("Page %lu created for %s\n", webkit_web_page_get_id(webPage), webkit_web_page_get_uri(webPage));
}
extern "C" G_MODULE_EXPORT void webkit_web_extension_initialize(WebKitWebExtension* extension)
{
g_signal_connect(extension, "page-created", G_CALLBACK(web_page_created_callback), NULL);
}
Согласно https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html и https://blogs.igalia.com/carlosgc/2013/09/10/webkit2gtk-web-process-extensions/, это должно распечатывать сообщение при каждом создании страницы.Я использую реализацию расширения так же, как справочный документ по webkit, где это обратный вызов для "initialize-web-extension".
Я не знаю, имеет ли это значение, но мой WebKitWebViewОбъект упакован в объект-бокс GTKWidget.Это вывод, который я получаю:
Page 1 created for Page 1 created for (null)
И это никогда не будет напечатано снова, даже когда я открываю новый файл (у меня есть диалог выбора файла, который открывает файл, поэтому WebKitWebView упакован вGTK_BOX).
Вот что говорят документы WebKit2GTK для обработчика «созданных страниц»:
void user_function (расширение WebKitWebExtension *, WebKitWebPage * web_page, gpointer user_data)
Этот сигнал испускается при создании нового WebKitWebPage в веб-процессе.Параметры
расширение: WebKitWebExtension, на котором излучается сигнал
web_page: WebKitWebPage создал
user_data: набор пользовательских данных, когда был подключен обработчик сигнала.
Flags: Run Last
Если это дает созданную веб-страницу, то почему я не могу получить URI с webkit_web_page_get_uri()
?Почему это дает только вывод (хотя и испорченный) только для первой загруженной страницы?
Редактировать: я загружаю страницу с помощью webkit_web_view_load_uri ()