webScriptNameForSelector和带下划线的javascript方法

webScriptNameForSelector and javascript method with underscore

本文关键字:javascript 方法 下划线 webScriptNameForSelector      更新时间:2023-09-26

我在我的应用程序中使用WebView,我加载的页面有一些现有的javascript函数调用,这些调用曾在windows环境中使用,现在应该在mac应用程序中。我的问题是,当前的javascript(从以下工作的windows应用程序移植而来)函数调用目标C如下:

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;
}

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

看这里的苹果文档

我认为在这里使用invokeUndefinedMethodFromWebScript:不是一个好主意

缺少冒号。

if(sel==@selector(MyObjectiveCFunction:))