WebKit JavaScriptCoreで遊んでみる

2012-03-03T00:00:00+00:00 C JavaScript

相変わらず適当に。とりあえずWebKitGTK(3)で表示しているJavaScriptを評価して結果を取得して表示するだけ

JavaScriptは

return "hello world";

な感じで、こういうJavaScriptを評価してC言語側で結果を取得して表示するまで

#include <gtk/gtk.h>
#include <webkit/webkit.h>
#include <JavaScriptCore/JavaScript.h>

static void loaded(WebKitWebView* view, WebKitWebFrame* frame, gpointer data) {

    WebKitWebFrame* contentFrame = webkit_web_view_get_main_frame(view);
    WebKitWebDataSource* ds = webkit_web_frame_get_data_source(contentFrame);
    GString *source = webkit_web_data_source_get_data(ds);

    JSGlobalContextRef ctx;
    ctx = webkit_web_frame_get_global_context(contentFrame);

    JSStringRef script;
    script = JSStringCreateWithUTF8CString(source->str);

    JSObjectRef fn;
    fn = JSObjectMakeFunction(ctx, NULL, 0, NULL, script, NULL, 1, NULL);

    JSValueRef value;
    value = JSObjectCallAsFunction(ctx, fn, NULL, 0, NULL, NULL);

    if (JSValueIsString(ctx,value)) {
        JSStringRef jstr;
        jstr = JSValueToStringCopy(ctx, value, NULL);

        size_t size;
        size = JSStringGetMaximumUTF8CStringSize(jstr);

        char buf[size];

        JSStringGetUTF8CString(jstr, buf, size);
        JSStringRelease(jstr);

        printf("%sn",buf);
    }

    JSStringRelease(script);
    g_string_free(source,TRUE);

    gtk_main_quit();
}

int main(int argc, char* argv) {
    gtk_init(&argc, &argv);

    GtkWidget* window;
    GtkWidget* view;

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    view = webkit_web_view_new();

    gtk_container_add(GTK_CONTAINER(window), view);
    g_signal_connect(view, "load-finished", G_CALLBACK(loaded), NULL);

    webkit_web_view_open(view, "http://localhost:5000/test.js");

    gtk_widget_show_all(GTK_WIDGET(window));
    gtk_main();

    return 0;
}

コンパイルは

gcc test.c -o test `pkg-config --cflags --libs webkitgtk-3.0`

な感じで、libwebkitgtk-3-devを入れて実行みたいな感じで。まぁFirst Stepな感じなんでこんなもんで

(非常に適当に)Android ICS SpellCheckerServiceを使ってみる android.widget.ArrayAdapterでのフィルタリングの拡張