Ответ 1
Вам также нужно сообщить WebKit/JavaScriptCore во время выполнения о ваших привязках (это в дополнение к ссылке с filename_wrap.o).
В частности, вам необходимо привязать их к глобальному объекту JavaScript (чтобы вызвать на ваш пример .js). Обратный вызов в окне WebKit можно использовать для своевременной ссылки на глобальный контекст JavaScript, а затем вы можете зарегистрировать свои функции на нем.
Применяя этот пример подключения к сигналу window-object-cleared
, код может выглядеть примерно так:
/* the window callback -
fired when the JavaScript window object has been cleared */
static void window_object_cleared_cb(WebKitWebView *web_view,
WebKitWebFrame *frame,
gpointer context,
gpointer window_object,
gpointer user_data)
{
/* Add your classes to JavaScriptCore */
example_init(context); // example_init generated by SWIG
}
/* ... and in your main application set up */
void yourmainfunc()
{
....
g_signal_connect (G_OBJECT (web_view), "window-object-cleared",
G_CALLBACK(window_object_cleared_cb), web_view);
webkit_web_view_load_uri (WEBKIT_WEB_VIEW (web_view), "file://filename.html");
...
}
В зависимости от того, какая ветвь SWIG вы используете, вам может понадобиться генерировать функцию example_init
самостоятельно (проверьте filename.cxx); для справки вот что означает функция инициализации зарегистрировать завернутые функции C, как в SWIG:
int example_init(JSContextRef context) {
JSObjectRef global = JSContextGetGlobalObject(context);
...
jsc_registerFunction(context, global, "gcd", _wrap_gcd);
...
}
ПРИМЕЧАНИЕ. - SWIG еще не официально поддерживает JavaScript; выше относится к использованию незавершенных (непроизводственных) ветвей SWIG.
Литература:
- SWIG-V8 источник и Документация по Javascript
- swig-jsc источник и example регистрации привязок
- SWIG JavaScriptCore Проект GSoC источник (Google Summer of Code 2012)
- Webkit: расширение статьи JavaScript - учебник/пример кода