// RunJavaScript runs script asynchronously in the context of the current page // in the WebView. Upon completion, resultCallback will be called with the // result of evaluating the script, or with an error encountered during // execution. To get the stack trace and other error logs, use the // ::console-message signal. // // See also: webkit_web_view_run_javascript at // http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-run-javascript func (v *WebView) RunJavaScript(script string, resultCallback func(result *gojs.Value, err error)) { var cCallback C.GAsyncReadyCallback var userData C.gpointer var err error if resultCallback != nil { callback := func(result *C.GAsyncResult) { var jserr *C.GError jsResult := C.webkit_web_view_run_javascript_finish(v.webView, result, &jserr) if jsResult == nil { defer C.g_error_free(jserr) msg := C.GoString((*C.char)(jserr.message)) resultCallback(nil, errors.New(msg)) return } ctxRaw := gojs.RawGlobalContext(unsafe.Pointer(C.webkit_javascript_result_get_global_context(jsResult))) jsValRaw := gojs.RawValue(unsafe.Pointer(C.webkit_javascript_result_get_value(jsResult))) ctx := (*gojs.Context)(gojs.NewGlobalContextFrom(ctxRaw)) jsVal := ctx.NewValueFrom(jsValRaw) resultCallback(jsVal, nil) } cCallback, userData, err = newGAsyncReadyCallback(callback) if err != nil { panic(err) } } cScript := C.CString(script) defer C.free(unsafe.Pointer(cScript)) C.webkit_web_view_run_javascript(v.webView, (*C.gchar)(cScript), nil, cCallback, userData) }
// RunJavaScript runs script asynchronously in the context of the current page // in the WebView. Upon completion, resultCallback will be called with the // result of evaluating the script, or with an error encountered during // execution. To get the stack trace and other error logs, use the // ::console-message signal. // // See also: webkit_web_view_run_javascript at // http://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebView.html#webkit-web-view-run-javascript func (v *WebView) RunJavaScript(script string, resultCallback func(result *gojs.Value, err error)) { var callbackIdPtr unsafe.Pointer if resultCallback != nil { callbackId := cgoregister(``, &RunJavaScriptResponse{ CWebView: v.webView, Reply: resultCallback, Autoremove: true, }) callbackIdPtr = unsafe.Pointer(C.CString(callbackId)) } C.webkit_web_view_run_javascript(v.webView, (*C.gchar)(C.CString(script)), nil, (C.GAsyncReadyCallback)(C.webkit2_gasync_callback), callbackIdPtr) }