我在更大的GTKmm/C++应用程序中使用WebKitGTK +。我正在使用JavaScriptCore与WebKitWebFrame和JSContext进行交互。回调需要const函数,如何通过对象的实例成员
因为我需要在调用JavaScript函数时与GTK GUI组件进行交互,所以我现在被卡住了。为此我找到了JSObjectMakeFunctionWithCallback函数。
JSStringRef str = JSStringCreateWithUTF8CString("ClickCallback");
JSObjectRef func = JSObjectMakeFunctionWithCallback(m_jsRef, str, ClickCallback);
JSObjectSetProperty(m_jsRef, JSContextGetGlobalObject(m_jsRef), str, func, kJSPropertyAttributeNone, NULL);
JSStringRelease(str);
凡回调必须定义为与高清静态函数:
static JSValueRef ClickCallback(JSContextRef ctx, JSObjectRef func, JSObjectRef self, size_t argc, const JSValueRef argv[], JSValueRef* exception)
所以一切工作只是我需要在回调我的对象实例中的GUI组件,我需要找回操作。
在SO上有类似的问题,但大多数重点是将对象实例传递给回调函数。我看不到用这种API做这件事的方法。
任何想法?
它不一定是一个静态函数,甚至不是一个成员函数。 –
我讨厌API时让你注册回调而不让你传递某种“上下文”cookie(通常是void *)。 –
@Emile - 的确如此。 V8允许通过将一个特殊的'Data'指针附加到传递给该函数的'Arguments'对象,至少。节省了很多麻烦。 – namuol