最後にこれを認識しました。より良い方法があるかもしれません(もしそうなら、チャイムしてください!)が、以下のように動作するようです。二つの引数を取るように意図されて
#import <WebKit/WebKit.h>
#import <JavaScriptCore/JavaScriptCore.h>
- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback;
...: - 私はWebView
への参照を渡すそこに - 私のObj-C(NSObject
由来)クラスでは、私は次のスクリプトがアクセス可能なメソッドを定義します:検索する文字列、および結果を処理する無名関数コールバック。
- (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ブロックを介して非同期的にも動作しますが、上記のとおりです。他の人に役立つことを願っています!
;これは間違いなく私を助けました! – tenfour