Javascript 通过WebScriptObject向JS脚本环境公开Cocoa对象

Javascript 通过WebScriptObject向JS脚本环境公开Cocoa对象,javascript,cocoa,webkit,Javascript,Cocoa,Webkit,我看到有几个类似的问题,但这是一个更基本的问题 我试图通过WebScriptObject向WebView公开一个简单的Cocoa对象,希望允许页面向Cocoa对象发送消息。关于这一点的文档非常清楚,但由于某些原因,我无法让它工作。不知道你能不能看看 这是我正在加载到脚本环境中的对象 @interface Client : NSObject { NSString *test; } @implementation Client - (id)init { self = [s

我看到有几个类似的问题,但这是一个更基本的问题

我试图通过WebScriptObject向WebView公开一个简单的Cocoa对象,希望允许页面向Cocoa对象发送消息。关于这一点的文档非常清楚,但由于某些原因,我无法让它工作。不知道你能不能看看

这是我正在加载到脚本环境中的对象

@interface Client : NSObject {

     NSString *test;

}

@implementation Client

- (id)init {

    self = [super init];
    test = [[NSString alloc] initWithString:@"Hey Simon"];
    return self;

}

- (NSString *)test {

    return test;
}
然后,我将该对象加载到WebView的frameLoad委托中,使用:

- (void)webView:(WebView *)webView didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame {

    Client *_client = [[Client alloc] init];
    [windowObject setValue:_client forKey:@"client"];

}
在JS方面,我只是在做一些非常基本的事情:

if( 'client' in window ) {

var client = window.client;

console.log( '---' );

console.log( 'client.test(): ' + client.test() );

console.log( '---' );

}
JS控制台显示TypeError:expression'client.test'[undefined]的结果不是函数

有几件事。我知道该对象已正确加载到脚本环境中,因为它不会通过条件加载,而且我可以看到以下描述:

console.log( 'Client object: ' + client )
但我只是不知道如何正确地公开我的cocoa方法。看看我上面所说的,我如何在类中实现这些方法,或者在JS中调用它们,是否存在一些问题

提前感谢,,
亚历克

它就在文件中:(

您必须在传入的对象上实现+(BOOL)isSelectorExcludedFromWebScript:(SEL)选择器

就我而言,我必须写作

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector

{
    if (aSelector == @selector(test)) return NO;
    return YES;
}