surf

surf browser, a WebKit based browser
git clone git://git.suckless.org/surf
Log | Files | Refs | README | LICENSE

commit 2e62372969239285705504187b0211039b5ae619
parent 3b104416d350f25db098d6c8dc9ddff11311e065
Author: Troels Henriksen <athas@sigkill.dk>
Date:   Thu,  3 Nov 2011 14:09:19 +0100

Add eval() function for executing Javascript.  Handy for keybindings.
Diffstat:
Msurf.c | 26+++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)

diff --git 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); @@ -144,15 +145,24 @@ cleanup(void) { } 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); } } @@ -740,6 +750,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); }