WebKit2GTK+ "window-object-cleared"未清除
WebKit2GTK+ "window-object-cleared" not clearing
这是后续的: 如何调试 WebKit2GTK+ 扩展
这是我的扩展:
#include <webkit2/webkit-web-extension.h>
#include <iostream>
static void window_object_cleared_callback(WebKitScriptWorld* world, WebKitWebPage* webPage, WebKitFrame* frame, gpointer userData)
{
std::cout << "Callback reachedn";
JSCContext *jsCtx = webkit_frame_get_js_context_for_script_world(frame, world);
JSCValue* title = jsc_context_evaluate(jsCtx, "document.title;", -1);
std::cout << "Title: " << jsc_value_to_string(title) << "n";
}
static void web_page_created_callback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer UserData)
{
g_print("Page %lu created for %sn", 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);
g_signal_connect(webkit_script_world_get_default(), "window-object-cleared", G_CALLBACK(window_object_cleared_callback), NULL);
}
打印到控制台的唯一内容是"为 (null( 创建的第 1 页"。当未创建任何内容时,将调用已创建页面的此回调,对于 winow-object-cleared 是否相同?
我不知道为什么window_object_cleared对象现在显示出工作的迹象。
这些是我在信号上发现的:https://webkitgtk.org/reference/webkit2gtk/stable/WebKitScriptWorld.html#WebKitScriptWorld-window-object-cleared
window-object-cleared 回调旨在注入 javascript。我认为只有当您至少向WebKitWebView添加"某些内容"时,它才会执行。您应该调用load_uri或类似的函数。
#include <webkit2/webkit-web-extension.h>
#include <iostream>
static void js_handler(WebKitWebPage* webPage)
{
JSCContext *jsCtx = webkit_frame_get_js_context(webkit_web_page_get_main_frame(webPage));
JSCValue* title = jsc_context_evaluate(jsCtx, "document.title;", -1);
std::cout << "Title: " << jsc_value_to_string(title) << "n";
}
static void document_loaded_callback(WebKitWebPage* webPage, gpointer userData)
{
g_print("Page %lu created for %sn", webkit_web_page_get_id(webPage), webkit_web_page_get_uri(webPage));
js_handler(webPage);
}
static void web_page_created_callback(WebKitWebExtension* extension, WebKitWebPage* webPage, gpointer userData)
{
g_signal_connect(webPage, "document-loaded", G_CALLBACK(document_loaded_callback), NULL);
}
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);
}
我想解决方案是使用 webkit 框架来获取 JSCContext,并使用"文档加载"信号而不是"窗口对象清除">
信号相关文章:
- 清除前检查矢量
- ifstream文件在从行中读取时被清除
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 如何清除/清空已打开的文件C++
- 如何在 c++ 中清除矢量容量?
- 可以清除递归函数中的变量吗?
- 在清除 istream 之前,我不应该需要取消获取它吗?
- 结构成员在访问时被清除
- 清除输入缓冲区后未提取字符串流
- SDL_ttf清除我之前和将来的所有渲染
- 如何使用内存集清除字符数组
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- QTreeWidgetItem 设置不可选择将清除选择
- libQGLViewer 如何在没有清除缓冲区的情况下绘制
- 清除具有已删除赋值运算符的成员的类实例
- 清除结构向量时会发生什么?
- 显式清除 std::move 之后的源资源
- C++ - 重置字符串流不会重置获取位置或清除标志吗?
- WebKit2GTK+ "window-object-cleared"未清除
- SFML window.clear()未清除屏幕