2010-02-25 60 views
4

我正在將頁面加載到WebView中。該頁面有這個小測試JavaScript:Cocoa WebView:無法使用`callWebScriptMethod調用特定的Javascript方法:`

<script type="text/javascript"> 
function test(parametr) 
{ 

    $('#testspan').html(parametr); 

} 

var bdu = (function(){ 
return { 
    secondtest: function(parametr) { 

    $('#testspan').html(parametr); 

    } 
} 
})(); 
</script> 

的問題是,我不能從可可

稱之爲「secondtest」功能,這是完美的工作:

[[webview1 windowScriptObject] callWebScriptMethod:@"test" withArguments:arguments]; 

這沒有工作:

[[webview1 windowScriptObject] callWebScriptMethod:@"bdu.secondtest" withArguments:arguments]; 

什麼會導致這個問題,我該如何解決它?

感謝

+0

我會後這是不是一個評論回答:我對JavaScript並不瞭解,但看起來第二個測試函數嵌入在本身位於函數調用中的塊內部。我沒有看到腳本外部的任何東西都可以將它解決爲可調用函數。 (如果這在Javascript中起作用,那麼這種語言比我想象的更糟糕。)我會從嵌入中刪除函數,看它是否有效。如果是這樣,那麼嵌入是錯誤的。 – TechZen 2010-02-25 13:39:40

回答

0

callWebscriptMethod:(的NSString *)名稱withArguments:(NSArray的*)ARGS:

不計算name作爲JavaScript表達式。所以它無法解析bdu.secondtest:它先不查找bdu,然後在其中獲取條目secondtest

取而代之,只需使用evaluateWebScript:即可。

1

「callWebScriptMethod」旨在對給定web腳本(即javascript)對象調用給定的方法。在你的第二行你想調用名爲「bdu」的JavaScript對象的「secondTest」方法。要做到這一點的方法是:

WebScriptObject* bdu =[[webview1 windowScriptObject] valueForKey:@"bdu"];

  • 調用BDU對象上的 「secondTest」 方法:

    [bdu callWebScriptMethod:@"secondtest" withArguments:arguments];

    1. 從窗口對象獲取BDU對象

  • 2

    我一直在努力這在科爾多瓦的MacOSX這裏有一段時間是我找到了解決方案,併爲我工作:

    的JavaScript:

    CordovaBridgeUtil.isObject = function(obj) { return obj.constructor == Object; }; 
    

    的ObjectiveC:

    WebScriptObject* bridgeUtil = [win evaluateWebScript:@"CordovaBridgeUtil"]; 
    NSNumber* result = [bridgeUtil callWebScriptMethod:@"isObject" withArguments:[NSArray arrayWithObject:item]];