Представление объекта Какао в среду сценариев JS через WebScriptObject - PullRequest
4 голосов
/ 12 мая 2011

Я вижу, что есть пара похожих вопросов, но это немного более простой вопрос.

Я пытаюсь представить простой объект Cocoa через WebScriptObject для WebView, надеюсь, что страница позволит отправлять сообщенияКакао-объект.Документация по этому вопросу очень ясна, но по какой-то причине я не могу заставить ее работать.Хотите знать, посмотрите ли вы ...

Вот объект, который я загружаю в среду сценариев.

@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: Result of expression 'client.test '[undefined] не является функцией.

Пара вещей.Я знаю, что объект загружается в среду сценариев должным образом, потому что он не пройдет условного плюс, я вижу описание с:

console.log( 'Client object: ' + client )

Но я просто не знаю, как выставить мои методы какаодолжным образом.Глядя на то, что я сказал выше, есть ли проблемы с тем, как я реализую методы в своем классе или вызываю их в JS?

Заранее спасибо, Алек

1 Ответ

2 голосов
/ 12 мая 2011

Это было прямо в документах. (

Вы должны реализовать + (BOOL) isSelectorExcludedFromWebScript: (SEL) aSelector для объекта, который вы передаете.

Так что в моем случае мне пришлось написать

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector

{
    if (aSelector == @selector(test)) return NO;
    return YES;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...