2012-03-21 59 views
1

我在我的应用程序中使用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。

回答

3

想出了一个解决方案:

- (id)invokeUndefinedMethodFromWebScript:(NSString *)name withArguments:(NSArray *)args 
{ 
NSLog(@"invoke undefined method: %@", name); 
if([name isEqualToString:@"My_ObjectiveCFunction"]) 
{ 
    return NSSelectorFromString(@"My_ObjectiveCFuntion"); 
} 
return nil; 
} 
+0

最近,我来到了同样的问题,与同类解决方案解决了它是一个好主意。但根据文档,'invokeUndefinedMethodFromWebScript:withArguments:'的返回值被定义为'返回值 调用未定义方法的结果。因此,我应该直接调用相应的方法还是返回一个选择器? – 2013-05-09 09:11:05

-1

缺少结肠。

如果(SEL == @选择(MyObjectiveCFunction :))

+0

这没有奏效。我认为这与方法名称中的_有关。 – ctrlspace 2012-04-25 20:36:05

0

你刚才不应该使用下划线字符。这基本上是唯一有效的解决方案。

here在苹果文档

我不使用invokeUndefinedMethodFromWebScript认为:在这里