webScriptNameForSelector和带下划线的javascript方法
问题描述:
我在我的应用程序中使用WebView,并且它正在加载的页面有一些现有的在Windows环境中使用的javascript函数调用,现在应该用在mac应用程序中。我的问题是,目前的JavaScript(从Windows应用程序移植在下列作品)函数调用目标C是这样的:webScriptNameForSelector和带下划线的javascript方法
function callObjectiveC
{
window.external.MY_ObjectiveCFunction();
}
我一直在尝试使用:
+ (NSString *)webScriptNameForSelector:(SEL)sel
{
if (sel == @selector(MyObjectiveCFunction))
{
return @"My_ObjectiveCFunction";
}
}
基于:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/WebKit/Protocols/WebScripting_Protocol/Reference/Reference.html但无济于事。有没有办法做到这一点?我可以调用客观的C方法,无论我想要什么,只需要能够将其映射到现有的javascript中即可。
谢谢, c。
答
想出了一个解决方案:
- (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args
{
NSLog(@"invoke undefined method: %@", name);
if([name isEqualToString:@"My_ObjectiveCFunction"])
{
return NSSelectorFromString(@"My_ObjectiveCFuntion");
}
return nil;
}
答
缺少结肠。
如果(SEL == @选择(MyObjectiveCFunction :))
+0
这没有奏效。我认为这与方法名称中的_有关。 – ctrlspace 2012-04-25 20:36:05
最近,我来到了同样的问题,与同类解决方案解决了它是一个好主意。但根据文档,'invokeUndefinedMethodFromWebScript:withArguments:'的返回值被定义为'返回值 调用未定义方法的结果。因此,我应该直接调用相应的方法还是返回一个选择器? – 2013-05-09 09:11:05