簡體   English   中英

WebKit2GTK+“窗口對象清除”未清除

[英]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 reached\n";

  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 %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);
  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 object 現在顯示出工作跡象。

這些是我在信號上發現的: 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 %s\n", 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,並使用“文檔加載”信號而不是“窗口對象清除”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM