From: Troels Henriksen Date: Thu, 3 Nov 2011 13:09:19 +0000 (+0100) Subject: Add eval() function for executing Javascript. Handy for keybindings. X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;h=2e62372969239285705504187b0211039b5ae619;p=surf.git Add eval() function for executing Javascript. Handy for keybindings. --- diff --git a/surf.c b/surf.c index 85155b5..60d1b14 100644 --- a/surf.c +++ b/surf.c @@ -102,6 +102,7 @@ static void setup(void); static void sigchld(int unused); static void source(Client *c, const Arg *arg); static void spawn(Client *c, const Arg *arg); +static void eval(Client *c, const Arg *arg); static void stop(Client *c, const Arg *arg); static void titlechange(WebKitWebView *v, WebKitWebFrame* frame, const char* title, Client *c); static void update(Client *c); @@ -143,16 +144,25 @@ cleanup(void) { g_free(stylefile); } +void +evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname) { + JSStringRef jsscript, jsscriptname; + JSValueRef exception = NULL; + + jsscript = JSStringCreateWithUTF8CString(script); + jsscriptname = JSStringCreateWithUTF8CString(scriptname); + JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), jsscriptname, 0, &exception); + JSStringRelease(jsscript); + JSStringRelease(jsscriptname); +} + void runscript(WebKitWebFrame *frame, JSContextRef js) { - JSStringRef jsscript; char *script; - JSValueRef exception = NULL; GError *error; - + if(g_file_get_contents(scriptfile, &script, NULL, &error)) { - jsscript = JSStringCreateWithUTF8CString(script); - JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), NULL, 0, &exception); + evalscript(frame, webkit_web_frame_get_global_context(frame), script, scriptfile); } } @@ -739,6 +749,12 @@ spawn(Client *c, const Arg *arg) { } } +void +eval(Client *c, const Arg *arg) { + WebKitWebFrame *frame = webkit_web_view_get_main_frame(c->view); + evalscript(frame, webkit_web_frame_get_global_context(frame), ((char **)arg->v)[0], ""); +} + void stop(Client *c, const Arg *arg) { webkit_web_view_stop_loading(c->view);