2012-03-21 62 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認爲:在這裏