WebKit2GTK +“页面创建的”扩展名只能运行一次

问题描述 投票:0回答:2

这是来自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.htmlhttps://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文档对“页面创建的”处理程序所说的:

空隙user_function(WebKitWebExtension *扩展名,WebKitWebPage * web_page,gpointer user_data)

当在Web Process中创建新的WebKitWebPage时,将发出此信号。参数

扩展名:发出信号的WebKitWebExtension

web_page:创建的WebKitWebPage

user_data:连接信号处理程序时的用户数据集。

标志:最后运行

如果这使创建的WebPage,那么为什么不能用webkit_web_page_get_uri()来获取uri?为什么这只给已加载的第一页提供输出(尽管很混乱)?

编辑:我正在使用webkit_web_view_load_uri()加载页面>

这是如何调试WebKit2GTK +扩展的后续问题。尽管有更多代码可供参考,但我对其进行了一些更改。我有以下Webkit扩展:#include&...

c++ gtk webkit webkit2-webextension
2个回答
0
投票

我刚刚接触过WebKitGtk的表面,我并不了解。但是据我了解,WebKitWebPage(名称具有误导性)只是反映了WebKitWebView小部件的实例,而不是您当前正在查看的网站。

[每次应用程序创建一个新的WebKitWebView小部件,通过“ page-created”信号通知扩展,并将WebKitWebPage对象传递给该新小部件。


0
投票

您是否正在使用webkit_web_view_load_uri更改网页?

© www.soinside.com 2019 - 2024. All rights reserved.