aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Simon Lipp <sloonz@gmail.com>2009-10-18 16:17:19 +0200
committerGravatar Dieter Plaetinck <dieter@plaetinck.be>2010-01-01 16:41:30 +0100
commit72e8c59426a4a8ac3f8612c4c34848a259882290 (patch)
tree9e07a4733959d07a13784afcdf140f93b2c08549
parent7bb5004a1d2cd5b0d7281a69e0bd15de61058044 (diff)
print javascript errors in eval_js
-rw-r--r--uzbl-core.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/uzbl-core.c b/uzbl-core.c
index fd8ee41..9203fd0 100644
--- a/uzbl-core.c
+++ b/uzbl-core.c
@@ -1050,6 +1050,7 @@ eval_js(WebKitWebView * web_view, gchar *script, GString *result) {
JSStringRef js_script;
JSValueRef js_result;
+ JSValueRef js_exc = NULL;
JSStringRef js_result_string;
size_t js_result_size;
@@ -1067,7 +1068,7 @@ eval_js(WebKitWebView * web_view, gchar *script, GString *result) {
/* evaluate the script and get return value*/
js_script = JSStringCreateWithUTF8CString(script);
- js_result = JSEvaluateScript(context, js_script, globalobject, NULL, 0, NULL);
+ js_result = JSEvaluateScript(context, js_script, globalobject, NULL, 0, &js_exc);
if (js_result && !JSValueIsUndefined(context, js_result)) {
js_result_string = JSValueToStringCopy(context, js_result, NULL);
js_result_size = JSStringGetMaximumUTF8CStringSize(js_result_string);
@@ -1080,6 +1081,37 @@ eval_js(WebKitWebView * web_view, gchar *script, GString *result) {
JSStringRelease(js_result_string);
}
+ else if (js_exc && JSValueIsObject(context, js_exc)) {
+ size_t size;
+ JSStringRef prop, val;
+ JSObjectRef exc = JSValueToObject(context, js_exc, NULL);
+
+ printf("Exception occured while executing script:\n");
+
+ /* Print line */
+ prop = JSStringCreateWithUTF8CString("line");
+ val = JSValueToStringCopy(context, JSObjectGetProperty(context, exc, prop, NULL), NULL);
+ size = JSStringGetMaximumUTF8CStringSize(val);
+ if(size) {
+ char cstr[size];
+ JSStringGetUTF8CString(val, cstr, size);
+ printf("At line %s: ", cstr);
+ }
+ JSStringRelease(prop);
+ JSStringRelease(val);
+
+ /* Print message */
+ prop = JSStringCreateWithUTF8CString("message");
+ val = JSValueToStringCopy(context, JSObjectGetProperty(context, exc, prop, NULL), NULL);
+ size = JSStringGetMaximumUTF8CStringSize(val);
+ if(size) {
+ char cstr[size];
+ JSStringGetUTF8CString(val, cstr, size);
+ printf("%s\n", cstr);
+ }
+ JSStringRelease(prop);
+ JSStringRelease(val);
+ }
/* cleanup */
JSObjectDeleteProperty(context, globalobject, var_name, NULL);