Javascript 通过WebScriptObject向JS脚本环境公开Cocoa对象
我看到有几个类似的问题,但这是一个更基本的问题 我试图通过WebScriptObject向WebView公开一个简单的Cocoa对象,希望允许页面向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
@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;
}