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

时间:2011-05-13 09:03:56

标签: webkit gtk

在此处创建一个窗口并生成一个网页:

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);
}

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您要了解的是如何从WebKit访问DOM。 WebKit有一个webkit_web_view_get_dom_document()http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#webkit-web-view-get-dom-document),它返回WebKitDOMDocumenthttps://live.gnome.org/WebKitGtk/ProgrammingGuide/Reference)的实例。这将使您可以直接访问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。希望有所帮助。