这是来自How to debug WebKit2GTK+ extensions的后续问题。虽然那里有更多代码可供参考,但我对其进行了一些更改。
我有以下 webkit 扩展:
#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 *extension, WebKitWebPage *web_page, gpointer user_data)
在 Web 进程中创建新的 WebKitWebPage 时会发出此信号。参数
extension:发出信号的 WebKitWebExtension
web_page:创建的 WebKitWebPage
user_data:连接信号处理程序时的用户数据集。
标志:最后运行
如果这给出了创建的网页,那么为什么我不能用 uri 获取 uri webkit_web_page_get_uri()
?为什么这只为加载的第一页提供输出(尽管混乱)?
编辑:我正在使用 webkit_web_view_load_uri() 加载页面