我试图在WebKitWebView中获得滚动条的位置。我读了足够多的文档,知道没有直观的方法。它需要打包成一个可执行文件,所以WebKitExtension不会将其删除。我甚至不知道从哪里开始所以我不会写任何MRE注意:如果需要的话,我可以使用JavaScript,但是我首先不知道如何与本地应用程序通信。
zvms9eto1#
编辑:这个源代码很糟糕,如果你想改正它,就使用它。好吧,你们所有的小男孩、小女孩和非欧几里德空间的生物,我来用一些美味的知识来迷惑你们悲伤、疲惫和沮丧的神经元:我已经做到了(终于),在问了这个问题3个星期之后。我不得不使用WebKitExtension来做到这一点。让你的大脑和小脑高兴吧,这里有一个低劣的源代码:
#include <fstream> #include <functional> #include <webkit2/webkit-web-extension.h> #include <JavaScriptCore/JavaScript.h> #include <iostream> #include <thread> #include <filesystem> #define SLEEP_PERIOD 5 static void save_pos(WebKitWebPage * web_page) { std::ofstream tmp_file; tmp_file.open((std::string) std::filesystem::current_path() + "/poslck"); tmp_file << "e"; tmp_file.close(); sleep(SLEEP_PERIOD + 1); std::filesystem::remove((std::string) std::filesystem::current_path() + "/poslck"); WebKitDOMDocument * doc = webkit_web_page_get_dom_document(web_page); WebKitDOMDOMWindow * win = webkit_dom_document_get_default_view(doc); std::ofstream o; while(true && !std::filesystem::exists((std::string) std::filesystem::current_path() + "/poslck")) { sleep(SLEEP_PERIOD); o.open(std::filesystem::current_path().string() + "/pos.conf"); o << webkit_dom_dom_window_get_scroll_y(win); o.close(); } } static void window_object_cleared_callback (WebKitScriptWorld *world, WebKitWebPage *web_page, WebKitFrame *frame, gpointer user_data) { std::thread dothesaving(std::bind(save_pos, web_page)); dothesaving.detach(); } extern "C" G_MODULE_EXPORT void webkit_web_extension_initialize (WebKitWebExtension *extension) { std::cout << "[INFO] Extension initialized\n"; g_signal_connect (webkit_script_world_get_default(), "window-object-cleared", G_CALLBACK (window_object_cleared_callback), NULL); }
使用以下内容编译:第一个月另外:请查看官方文档以获得更多指导方针,从而了解如何在WebKitGTK项目中使用扩展。在别人开始恨我之前:我使用了一些过时的函数和临时文件,原因是我不知道如何使用JavaScriptCore API(我还在看文档在哪里),也不知道如何在扩展之间通信。
1条答案
按热度按时间zvms9eto1#
编辑:这个源代码很糟糕,如果你想改正它,就使用它。
好吧,你们所有的小男孩、小女孩和非欧几里德空间的生物,我来用一些美味的知识来迷惑你们悲伤、疲惫和沮丧的神经元:
我已经做到了(终于),在问了这个问题3个星期之后。我不得不使用WebKitExtension来做到这一点。让你的大脑和小脑高兴吧,这里有一个低劣的源代码:
使用以下内容编译:第一个月
另外:请查看官方文档以获得更多指导方针,从而了解如何在WebKitGTK项目中使用扩展。
在别人开始恨我之前:我使用了一些过时的函数和临时文件,原因是我不知道如何使用JavaScriptCore API(我还在看文档在哪里),也不知道如何在扩展之间通信。