2012-12-03 7 views
12

私の目標は、Webアプリケーションを形成するためにCライブラリを使用することです。ウェブアプリケーションでCベースのAPI(クラッタ)を使用するためのjavascript拡張

"SWIG"ツールを使用してその方法を選択しました。 ザ・ガブガブ飲むツールは、私は.jsファイルが正常に行われたことを確認するために、このアプリをコンパイルして実行するためにSWIGツールを使用三つ

1) .c file which defines all the functions. 

2) .i file also called interface file which is creating the 
interface to load the APIs wherin I used the extern keyword. 

3) APP written in javascript extension (.js file). 

が必要です。 XMING X11ウィンドウでアプリケーションが正常に動作しています。コンパイルで

それが今、私は、ブラウザのページにこのアプリを実行したい_wrap.o、の.oファイルとlibFILENAME.so

を作成します。

私はMxLauncherコードを提供するWebkitクラッターポートを使用しています。 私はwebkit_iweb_view_load_uri(WEBKIT_IWEB_VIEW(view)、 "filename.html")を使用しています。私のウェブページビューでそのJavaScriptを実行するためのHTMLファイルをロードするAPI。

コンパイル時に作成された.soをリンクしています。

エラーメッセージ:JS CONSOLE:ファイル:///filename.js: にReferenceError:変数を見つけることができません:たとえば

FILENAME.C

int gcd(int x, int y) `enter code here`{ 
    int g; 
    g = y; 
    while (x > 0) { 
    g = x; 
    x = y % x; 
    y = g; 
    } 
    return g; 
} 

ファイル名.i

%module example 
extern int gcd(int x, int y); 
私の目標を達成するために取得する方法3210

filename.js

x = 42; 
y = 105; 
g = example.gcd(x,y); 

答えて

2

実行時にWebKit/JavaScriptCoreにバインドについても通知する必要があります(これはfilename_wrap.oとのリンクに加えてあります)。

具体的には、グローバルJavaScriptオブジェクトにバインドする必要があります(例:.jsの例を呼び出すには)。 WebKitウィンドウのコールバックを使用して、グローバルJavaScriptコンテキストへのタイムリーな参照を取得し、関数を登録することができます。あなたはあなた自身が(ファイル名を確認しexample_init関数を生成する必要があるかもしれません使用している

/* 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のどの枝に:コードは次のようになり可能性がwindow-object-cleared信号にフックのこのexampleを適応

。 cxx);ここでは参考のためにregister wrapped C functionsに初期化関数はSWIGでどのように見えるかです:

int example_init(JSContextRef context) { 
    JSObjectRef global = JSContextGetGlobalObject(context); 
... 
    jsc_registerFunction(context, global, "gcd", _wrap_gcd); 
... 
} 

NOTE - SWIGはまだ正式にはJavaScriptをサポートしていません。上記は、仕掛品(非生産)SWIG支店の使用を指しています。

参考文献:

関連する問題