0

iOSプロジェクトでJavaScriptCoreフレームワーク/ライブラリを使用した人はいますか?既存のフレームワークリストにそのようなフレームワークがないので、Appleオープンソースサイトhttp://www.opensource.apple.com/release/ios-40/からソースコードをダウンロードしました。

これをアプリケーションに統合するために何をする必要があるかを知りたいと思います。これらのAPIはすでにSDKに存在し、ヘッダーだけをコピーしてメソッドを呼び出すことができますか、それともすべてのソースコードをプロジェクトにコピーする必要がありますか?

ヘッダーをコピーしてインポートするだけの作業プロジェクトがあります。しかし、私はそれがどのように機能するかを理解することができません。起動時に呼び出される以下のメソッドがあります。

#include <dlfcn.h>
@implementation JSCocoaSymbolFetcher
+ (void)populateJavascriptCoreSymbols
{
_JSEvaluateScript = dlsym(RTLD_DEFAULT, "JSEvaluateScript");
_JSGarbageCollect = dlsym(RTLD_DEFAULT, "JSGarbageCollect");
_JSGlobalContextCreate = dlsym(RTLD_DEFAULT, "JSGlobalContextCreate");
_JSGlobalContextRetain = dlsym(RTLD_DEFAULT, "JSGlobalContextRetain");
_JSGlobalContextRelease = dlsym(RTLD_DEFAULT, "JSGlobalContextRelease");
_JSContextGetGlobalObject = dlsym(RTLD_DEFAULT, "JSContextGetGlobalObject");
_JSClassCreate = dlsym(RTLD_DEFAULT, "JSClassCreate");
_JSClassRetain = dlsym(RTLD_DEFAULT, "JSClassRetain");
.
.
.//other similar code
.
}

@implementationの前にもこのようなメソッドがあります

JSValueRef (*_JSEvaluateScript)(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception);
JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef thisObject, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception)
{
return _JSEvaluateScript(ctx, script, thisObject, sourceURL, startingLineNumber, exception);
}

void (*_JSGarbageCollect)(JSContextRef ctx);
void JSGarbageCollect(JSContextRef ctx)
{
return _JSGarbageCollect(ctx);
}

だから私の質問は

1)iPhoneアプリケーション用のJavaScriptCoreを使用してみた人はいますか?はいの場合どのように?

2)dlsymメソッドは何をしますか?

3)最後に述べた方法はどのように機能しますか?例えばvoid (*_JSGarbageCollect)(JSContextRef ctx); void JSGarbageCollect(JSContextRef ctx) { return _JSGarbageCollect(ctx); }

4

1 に答える 1

0

JavaScriptCore をアプリにバンドルできますが、プロジェクト全体をアプリケーションに含める必要があります。詳細については、 http://www.phoboslab.org/log/2011/04/ios-and-javascript-for-real-this-timeを参照してください。

于 2011-04-28T09:10:41.520 に答える