我正在尝试在WebView中传递来自JavaScript的函数引用,因此我的Objective-C代码可以在异步Obj-C方法完成时调用该函数.我看到如何传递简单类型 - 字符串,数字等 - 但似乎无法弄清楚如何传递函数引用的东西,比如
window.myRootObject.myObjCSelector("some-string", function(data) {
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
我已经用Google搜索了一下,但是仍然很短,并且还未在文档中找到对此的引用(尚未).在Cocoa工作,但希望能够在iOS上做同样的事情.
在此先感谢您的帮助!
编辑:函数参数应该是匿名的 - 希望这澄清.:)
Chr*_*ato 14
终于搞清楚了.可能有更好的方法(如果是这样,请加入!)但以下似乎有效.在我的Obj-C(NSObject-derived)类中 - 我将引用传递给WebView- 我定义了以下脚本可访问的方法:
#import <WebKit/WebKit.h>
#import <JavaScriptCore/JavaScriptCore.h>
- (void) search:(NSString *)prefix withCallback:(WebScriptObject *)callback;
Run Code Online (Sandbox Code Playgroud)
...它用于获取两个参数:一个用于搜索的字符串,以及一个用于处理结果的匿名函数回调.它是如此实施的:
- (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);
}
Run Code Online (Sandbox Code Playgroud)
这实际上也是异步的,通过Objective-C块,但要点在上面.希望它可以帮助别人!
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |