2011-05-12 4 views
4

私は同様の質問がいくつかあることを知っていますが、これは少し基本的です。WebScriptObjectを介してJS Scripting EnvironmentにCocoaオブジェクトを公開する

単純なCocoaオブジェクトをWebScriptObject経由でWebViewに公開しようとしていますが、うまくいけばページが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デリゲートにそのオブジェクトをロードしています:

if('client' in window) { 

var client = window.client; 

console.log('---'); 

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

console.log('---'); 

} 

物事のJS側で
- (void)webView:(WebView *)webView didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame { 

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

} 

、私は本当に基本的な何かをやっています

JSコンソールでTypeErrorと表示されます。式 'client.test'の結果[未定義]は関数ではありません。

いくつかのことがあります。私はそれが条件を渡さないので、オブジェクトが正しくスクリプト環境にロードされている知っているプラ​​ス私は説明を見ることができます:

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

しかし、私はちょうど適切に私のココアメソッドを公開する方法がわかりません。私が上で述べたことを見て、私のクラスでメソッドを実装する方法や、JSで呼び出す方法に問題がありますか?

それはドキュメントで、右があった事前のおかげで、 アレック

答えて

2

。 :(あなたは+(BOOL)isSelectorExcludedFromWebScript実装する必要が

:あなたが渡しているオブジェクトに(SEL)aSelectorを

だから私の場合、私は

+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector 

{ 
    if (aSelector == @selector(test)) return NO; 
    return YES; 
} 
を書かなければなりませんでした
関連する問題