Bir HTML arabirimini görüntülemek için bir Web Görünümü kullanan bir Kakao uygulamasına sahibim. HTML arabirimindeki bir Javascript işlevinden Objective-C yöntemini çağırmaya nasıl giderim?Bir Cocoa/WebKit uygulamasında Javascript'ten Objective-C yöntemi nasıl çağrılır?
cevap
Bu, developer.apple.com adresinde belgelenmiştir.
NimbleKit kullanarak bir çözüm var. Javascript'ten Object C fonksiyonlarını çağırabilir.
sizin için ne kadar güzel, paylaşmaya ne dersin? – Jonathan
istediğini iPhone uygulamada da yaparsanız, UIWebViewDelegate yöntemi shouldStartLoadWithRequest ile bir hile yapmak gerekir:
Bu API http://code.google.com/p/jsbridge-to-cocoa/ sizin için yapar. Çok hafif.
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
Yararlı bilgiler için teşekkürler. Bu cevap gerçekten bana çok yardımcı olur! – Tommy
sayesinde, her nasılsa benim Google :) arar iOS yardım arayan herkes için – georgebrock
, yukarıdaki cevabı Mac-yalnızca olduğuna dikkat bu cevapsız. – zekel
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. –