我有一个使用WebView显示HTML界面的Cocoa应用程序。我将如何从HTML界面中的JavaScript函数中调用Objective-C方法?如何从Cocoa/WebKit应用程序中的JavaScript调用Objective-C方法?
11
A
回答
12
这记录在developer.apple.com。
1
我有一个使用NimbleKit的解决方案。它可以从Javascript调用Objective C函数。
3
如果你想在iPhone应用程序做到这一点,你需要做的一招与UIWebViewDelegate方法shouldStartLoadWithRequest:
这个API http://code.google.com/p/jsbridge-to-cocoa/会为你。它非常轻巧。
3
觉得挺绿,苹果的文档是我很不能使用,所以我做了呼吁在可可JavaScript和反之亦然Objective C的方法的概念证明,尽管后者容易得多。
首先确保你有你的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调用映射到webScriptNameForSelector中的ObjC方法。概念文件的
全部项目证明: https://github.com/bytestudios/JS-function-and-ObjC-method-connector
相关问题
- 1. 从objectiveC调用javascript函数
- 2. 如何执行/调用ASP.NET Web应用程序C#方法中的JavaScript方法
- 3. 如何从assets/javascript/partial调用应用程序助手中的方法?
- 4. 如何从.Net核心应用程序中调用AppKit方法?
- 5. 如何从android应用程序调用远程方法
- 6. 如何调用JavaScript方法在asp.net web应用程序
- 7. 如何从UIViewController调用应用程序委托的方法?
- 8. 从Javascript调用AIR应用程序方法
- 9. 调用C++方法回调ObjectiveC
- 10. 达尔文和ObjectiveC - 如何从Cocoa应用程序调用shell脚本?
- 11. 如何从android中调用javascript方法
- 12. 如何从aspx.cs中调用javascript方法
- 13. 从Objectivec中调用C main
- 14. 从vb.net应用程序中的另一个应用程序调用方法
- 15. 从Windows应用程序调用ASP.NET应用程序中的方法
- 16. 如何从另一个ASP.NET应用程序调用codebehind方法?
- 17. 如何在Objective-C方法的phonegap ios应用程序中调用javascript函数?
- 18. 从我的.NET应用程序调用现有Com应用程序的方法
- 19. 从Flash SWF或exe调用WPF应用程序中的方法
- 20. 如何在控制台应用程序主要方法中调用javascript函数
- 21. 我如何在我的Web应用程序中调用调用的方法
- 22. 从另一个C#应用程序调用C#应用程序的方法
- 23. 从子类应用程序代表调用应用程序的deletegate方法
- 24. 如何在VB6.0应用程序中调用WCF服务方法
- 25. 如何在Rails应用程序中调用PHP方法?
- 26. 如何在iphone应用程序中调用方法?
- 27. 如何从J2EE Web应用程序中的服务层调用DAO方法
- 28. 如何从JavaScript调用Java方法
- 29. 如何从JavaScript调用Objective-C方法?
- 30. 如何从JWebunit调用javascript方法
感谢,种种原因错过了,在我的谷歌搜索:) – georgebrock 2008-09-18 13:25:10
对于任何搜索iOS的帮助,注意上面的答案是苹果只。 – zekel 2012-03-23 17:46:18
请注意,链接已更改,因此此链接专用答案已无用。 – 2012-08-10 21:06:24