diff -r 8671f9860efe surf.c --- a/surf.c Tue May 11 10:16:22 2010 +0200 +++ b/surf.c Tue May 11 11:06:55 2010 +0200 @@ -67,6 +67,8 @@ static char *buildpath(const char *path); static void cleanup(void); +static void evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname); +static void evalscriptfile(WebKitWebFrame *frame, JSContextRef js, char *scriptpath); static void clipboard(Client *c, const Arg *arg); static void context(WebKitWebView *v, GtkMenu *m, Client *c); static char *copystr(char **str, const char *src); @@ -107,6 +109,8 @@ static void sigchld(int unused); static void source(Client *c, const Arg *arg); static void spawn(Client *c, const Arg *arg); +static void runscript(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); @@ -151,15 +155,23 @@ } void -runscript(WebKitWebFrame *frame, JSContextRef js) { - JSStringRef jsscript; - char *script; +evalscript(WebKitWebFrame *frame, JSContextRef js, char *script, char* scriptname) { + JSStringRef jsscript, jsscriptname; 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); + jsscript = JSStringCreateWithUTF8CString(script); + jsscriptname = JSStringCreateWithUTF8CString(scriptname); + JSEvaluateScript(js, jsscript, JSContextGetGlobalObject(js), jsscriptname, 0, &exception); + JSStringRelease(jsscript); + JSStringRelease(jsscriptname); +} + +void +evalscriptfile(WebKitWebFrame *frame, JSContextRef js, char *scriptpath) { + GError *error = NULL; + char* script = NULL; + if(g_file_get_contents(scriptpath, &script, NULL, &error)) { + evalscript(frame, webkit_web_frame_get_global_context(frame), script, scriptpath); } } @@ -576,7 +588,7 @@ gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c); webkit_web_view_set_full_content_zoom(c->view, TRUE); frame = webkit_web_view_get_main_frame(c->view); - runscript(frame, webkit_web_frame_get_global_context(frame)); + evalscriptfile(frame, webkit_web_frame_get_global_context(frame), scriptfile); settings = webkit_web_view_get_settings(c->view); if(!(ua = getenv("SURF_USERAGENT"))) ua = useragent; @@ -825,6 +837,18 @@ } void +runscript(Client *c, const Arg *arg) { + WebKitWebFrame *frame = webkit_web_view_get_main_frame(c->view); + evalscriptfile(frame, webkit_web_frame_get_global_context(frame), ((char **)arg->v)[0]); +} + +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) { if(c->download) webkit_download_cancel(c->download); @@ -881,7 +905,7 @@ void windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObjectRef win, Client *c) { - runscript(frame, js); + evalscriptfile(frame, js, scriptfile); } void