Как получить список гиперссылок веб-страницы в Webkit / Gtk? - PullRequest
1 голос
/ 13 мая 2011

Здесь создается окно и создается веб-страница:

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 Ответ

1 голос
/ 01 апреля 2013

То, что вы хотите посмотреть, это как получить доступ к DOM из WebKit. 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).). Это даст вам прямой доступ к 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. Надеюсь, что это поможет.

...