我看到有几个类似的问题,但这有点基础。
我试图通过WebScriptObject将一个简单的Cocoa对象暴露给WebView,希望允许页面向Cocoa对象发送消息。关于此的文档非常清楚,但由于某种原因,我无法让它工作。想知道你是否看看......
这是我正在加载到脚本环境中的Object。
@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:表达式'client.test'[undefined]的结果不是函数。
有几件事。我知道对象正在被正确加载到脚本环境中,因为它不会通过条件加我可以看到描述:
console.log( 'Client object: ' + client )
但我只是不知道如何正确地公开我的可可方法。看看我上面所说的,我是如何在我的类中实现方法或在JS中调用它们有一些问题?
提前致谢, 艾力
答案 0 :(得分:2)
它就在文档中。 :(
您必须在传入的对象上实现+(BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector。
所以在我的情况下,我不得不写
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
{
if (aSelector == @selector(test)) return NO;
return YES;
}