ついにこれを理解した。より良い方法があるかもしれませんが(もしそうなら、チャイムを鳴らしてください!)、以下はうまくいくようです。私のObj-C(NSObject
派生)クラスで-への参照を渡しWebView
ます-私は次のスクリプトアクセス可能なメソッドを定義します:
#import <WebKit/WebKit.h>
#import <JavaScriptCore/JavaScriptCore.h>
- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback;
...これは、検索に使用する文字列と、結果を処理するための無名関数コールバックの2つの引数を取ることを目的としています。このように実装されています:
- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback
{
// Functions get passed in as WebScriptObjects, which give you access to the function as a JSObject
JSObjectRef ref = [callback JSObject];
// Through WebView, you can get to the JS globalContext
JSContextRef ctx = [[view mainFrame] globalContext];
// In my case, I have a JSON string I want to pass back into the page as a JavaScript object
JSValueRef obj = JSValueMakeFromJSONString(ctx, JSStringCreateWithCFString((__bridge CFStringRef)responseString));
// And here's where I call the callback and pass in the JS object
JSObjectCallAsFunction(ctx, ref, NULL, 1, &obj, NULL);
}
これは実際にはObjective-Cブロックを介して非同期でも機能しますが、要点は上記のとおりです。それが他の誰かに役立つことを願っています!