2008-09-18 15 views

cevap

12

Bu, developer.apple.com adresinde belgelenmiştir.

+0

sayesinde, her nasılsa benim Google :) arar iOS yardım arayan herkes için – georgebrock

+2

, yukarıdaki cevabı Mac-yalnızca olduğuna dikkat bu cevapsız. – zekel

+1

Bağlantının değiştiğine dikkat edin, bu nedenle bu yalnızca bağlantı yanıtı artık kullanışlı değil. –

1

NimbleKit kullanarak bir çözüm var. Javascript'ten Object C fonksiyonlarını çağırabilir.

+4

sizin için ne kadar güzel, paylaşmaya ne dersin? – Jonathan

3

Oldukça yeşil olan Apple'ın belgeleri benim için oldukça kullanışsızdır, bu yüzden son derece kolay olsa da, nesnel C yöntemlerini javascript'ten ve tam tersi de Kakao'dan arama kavramının bir kanıtını yaptım.

İlk emin setFrameLoadDelegate olarak web görüntülemesini sahip olun:

DoIu biter bitmez belirli bir nesne izlemek için web görüntülemesini anlatmaya gerek
[testWinWebView setFrameLoadDelegate:self]; 

:

- (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowScriptObject forFrame:(WebFrame *)frame { 
    //add the controller to the script environment 
    //the "ObjCConnector" object will now be available to JavaScript 
    [windowScriptObject setValue:self forKey:@"ObjCConnector"]; 
} 

Sonra iş iletişim kutusu:

// a few methods to log activity 
- (void)acceptJavaScriptFunctionOne:(NSString*) logText { 
    NSLog(@"acceptJavaScriptFunctionOne: %@",logText); 
} 
- (void)acceptJavaScriptFunctionTwo:(NSString*) logText { 
    NSLog(@"acceptJavaScriptFunctionTwo: %@",logText); 
} 

//this returns a nice name for the method in the JavaScript environment 
+(NSString*)webScriptNameForSelector:(SEL)sel { 
    NSLog(@"%@ received %@ with sel='%@'", self, NSStringFromSelector(_cmd), NSStringFromSelector(sel)); 
    if(sel == @selector(acceptJavaScriptFunctionOne:)) 
     return @"functionOne"; // this is what you're sending in from JS to map to above line 
    if(sel == @selector(acceptJavaScriptFunctionTwo:)) 
     return @"functionTwo"; // this is what you're sending in from JS to map to above line 
    return nil; 
} 

//this allows JavaScript to call the -logJavaScriptString: method 
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)sel { 
    NSLog(@"isSelectorExcludedFromWebScript: %@", NSStringFromSelector(sel)); 
    if(sel == @selector(acceptJavaScriptFunctionOne:) || 
     sel == @selector(acceptJavaScriptFunctionTwo:)) 
     return NO; 
    return YES; 
} 

Anahtar şu ki, birden çok yönteminiz varsa Aramak istediğinizde, bunların tümünü isSelectorExcludedFromWebScript yönteminde hariç tutmanız gerekir ve webScriptNameForSelector'da ObjC yöntemiyle eşlemek için javascript çağrısına ihtiyacınız vardır. kavram dosyasının

Tam proje geçirmez: https://github.com/bytestudios/JS-function-and-ObjC-method-connector

+0

Yararlı bilgiler için teşekkürler. Bu cevap gerçekten bana çok yardımcı olur! – Tommy