У меня есть приложение Cocoa, которое использует WebView для отображения интерфейса HTML. Как мне обратиться к методу Objective-C из функции Javascript в интерфейсе HTML?Как вызвать метод Objective-C из Javascript в приложении Cocoa/WebKit?
ответ
Это задокументировано в developer.apple.com.
У меня есть решение, использующее NimbleKit. Он может вызывать функции Objective C из Javascript.
Если вы хотите сделать это в iPhone приложений, вы должны были бы сделать трюк с помощью метода shouldStartLoadWithRequest UIWebViewDelegate:
Это апи http://code.google.com/p/jsbridge-to-cocoa/ делает это для вас. Это очень легкий вес.
Будучи довольно зеленым, документация Apple довольно непригодна для меня, поэтому я сделал доказательство концепции вызова методов Objective C из javascript и наоборот в Cocoa, хотя последнее было намного проще.
Сначала убедитесь, что у вас есть WebView как setFrameLoadDelegate:
[testWinWebView setFrameLoadDelegate:self];
Вы должны сказать WebView, чтобы наблюдать за определенным объектом, как только он будет загружен:
- (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"];
}
Тогда бизнес сообщения:
// 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;
}
Ключ в том, что если у вас есть несколько методов вы должны позвонить, вам нужно, чтобы все они были исключены в методе isSelectorExcludedFromWebScript, и вам нужен вызов javascript для отображения метода ObjC в webScriptNameForSelector.
Полный проект доказательство концепции файла: https://github.com/bytestudios/JS-function-and-ObjC-method-connector
- 1. Как вызвать метод действия из javascript?
- 2. Как вызвать метод класса из javascript/jquery
- 3. Вызвать метод C# из Javascript
- 4. Как вызвать метод контроллера из Javascript
- 5. Как вызвать метод апплета из javascript
- 6. Как вызвать метод GWT из кода javascript
- 7. Как вызвать собственный метод просмотра из JavaScript
- 8. Как вызвать метод javascript из JWebunit
- 9. Как вызвать метод .cs из функции JavaScript?
- 10. Как вызвать метод контроллера из функции Javascript
- 11. Как вызвать метод javascript из класса TypeScript?
- 12. Как вызвать метод PHP в приложении Rails?
- 13. Как вызвать веб-метод в приложении Java?
- 14. Вызвать метод контроллера из javascript в visualforce
- 15. Метод не найден в ObjectiveC
- 16. Как вызвать метод статического подкласса в JavaScript
- 17. Как вызвать метод Writecript в файле JavaScript
- 18. Как мне вызвать этот метод в Javascript?
- 19. Вызвать метод C# из ошибки JavaScript
- 20. Как вызвать метод из объекта в объекте в javascript?
- 21. Вызвать метод GWT из рукописного JavaScript
- 22. Не удалось вызвать метод Asp.net из Javascript
- 23. Вызвать метод Javascript из кода позади
- 24. Как вызвать Javascript-метод в iOS?
- 25. Вызвать метод в приложении системы Android
- 26. Вызвать метод C# из JavaScript с параметром
- 27. Как вызвать метод javascript в javacode
- 28. Как вызвать метод C# в javascript
- 29. Как вызвать метод javaservlet в функции javascript?
- 30. Как вызвать метод из страницы asp.net .cs из javascript?
Спасибо, как-то пропустил, что в моем Google ищет :) – georgebrock 2008-09-18 13:25:10
Для всех, кто ищет IOS помощь, обратите внимание, что выше ответ Mac-только. – zekel 2012-03-23 17:46:18
Обратите внимание, что ссылка изменилась, поэтому этот ответ только для ссылок больше не нужен. – 2012-08-10 21:06:24