如何在Webkit/Gtk中获取网页的超链接列表?

发布于 2024-11-07 00:06:32 字数 1055 浏览 0 评论 0 原文

这里正在创建一个窗口并生成一个网页:

int main(int argc, char* argv[])
{
    WebKitWebView *webView;
    GtkWidget *main_window;
    gtk_init(&argc, &argv);
    if (!g_thread_supported())
        g_thread_init(NULL);
#ifndef GTK_API_VERSION_2
    disablePlugin("Shockwave Flash");
#endif
    main_window = createWindow(&webView);
    gchar *uri =(gchar*)(argc > 1 ? argv[1] : "http://www.google.com/");
    gchar *fileURL = filenameToURL(uri);
    webkit_web_view_load_uri(webView, fileURL ? fileURL : uri);
    g_free(fileURL);
    gtk_widget_grab_focus(GTK_WIDGET(webView));
    gtk_widget_show_all(main_window);
    gtk_main();
    return 0;
}

这里有一个通知说正在加载页面:

void FrameLoaderClient::postProgressFinishedNotification()
{
    WebKitWebView* webView = getViewFromFrame(m_frame);
    WebKitWebViewPrivate* privateData = webView->priv;
    if (!privateData->disposing)
    g_signal_emit_by_name(webView, "load-finished", m_frame);
}

现在页面加载后,我想获取可聚焦节点的列表,例如超链接、复选框。

我该怎么做?

In here a window is being created and a webpage is generated:

int main(int argc, char* argv[])
{
    WebKitWebView *webView;
    GtkWidget *main_window;
    gtk_init(&argc, &argv);
    if (!g_thread_supported())
        g_thread_init(NULL);
#ifndef GTK_API_VERSION_2
    disablePlugin("Shockwave Flash");
#endif
    main_window = createWindow(&webView);
    gchar *uri =(gchar*)(argc > 1 ? argv[1] : "http://www.google.com/");
    gchar *fileURL = filenameToURL(uri);
    webkit_web_view_load_uri(webView, fileURL ? fileURL : uri);
    g_free(fileURL);
    gtk_widget_grab_focus(GTK_WIDGET(webView));
    gtk_widget_show_all(main_window);
    gtk_main();
    return 0;
}

And here is where a notification says that a page is being loaded:

void FrameLoaderClient::postProgressFinishedNotification()
{
    WebKitWebView* webView = getViewFromFrame(m_frame);
    WebKitWebViewPrivate* privateData = webView->priv;
    if (!privateData->disposing)
    g_signal_emit_by_name(webView, "load-finished", m_frame);
}

Now after the page is loaded, I want to get the list of focusable nodes such as hyperlinks, checkbox.

how can i do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夜清冷一曲。 2024-11-14 00:06:32

您想要了解的是如何从 WebKit 访问 DOM。 WebKit 有一个 webkit_web_view_get_dom_document()http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#webkit-web-view-get-dom-document) 返回 WebKitDOMDocument (https://live.gnome.org/WebKitGtk/ProgrammingGuide/Reference< /a>)。这将使您可以直接访问 DOM,并具有诸如 webkit_dom_document_get_elements_by_tag_name() 之类的方法来查询 DOM。你可以这样做:

WebKitDomDocument *dom = webkit_web_view_get_dom_document(webview);
WebKitDOMNodeList *elements = webkit_dom_document_get_elements_by_tag_name(dom, "a");
int i = 0;
WebKitDOMElement *anchor = NULL;
for (; i < webkit_dom_node_list_get_length(elements); i++) {
     anchor = (WebKitDOMElement *)webkit_dom_node_list_item(elements, i);
}

这不是完美的代码,但你应该从中得到想法。如果您想查看比较全面的示例,请查看此处: http://www.opensource.apple.com/source/WebKit/WebKit-7533.16/gtk/tests/testdomdocument.c。希望有帮助。

What you want to look at is how to access the DOM from WebKit. WebKit has a webkit_web_view_get_dom_document() (http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#webkit-web-view-get-dom-document) which returns an instance of WebKitDOMDocument (https://live.gnome.org/WebKitGtk/ProgrammingGuide/Reference). This will give you direct access to the DOM and has methods like webkit_dom_document_get_elements_by_tag_name() to query the DOM. You could do something like this:

WebKitDomDocument *dom = webkit_web_view_get_dom_document(webview);
WebKitDOMNodeList *elements = webkit_dom_document_get_elements_by_tag_name(dom, "a");
int i = 0;
WebKitDOMElement *anchor = NULL;
for (; i < webkit_dom_node_list_get_length(elements); i++) {
     anchor = (WebKitDOMElement *)webkit_dom_node_list_item(elements, i);
}

This is not perfect code, but you should get the idea from it. If you want to take a look at a somewhat comprehensive sample look here: http://www.opensource.apple.com/source/WebKit/WebKit-7533.16/gtk/tests/testdomdocument.c. Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文