2012-04-05 54 views
1

比方說,我有一個UIWebView與一些JavaScript函數。我希望這些javascript函數能夠從我的應用程序請求信息,並且我的應用程序應該返回它。我能夠使用URL Schemes獲取請求,但是我不知道如何將信息返回給javascript函數。如何在Objective-C中將信息返回給javascript函數?

是在UIWebView中注入一個JavaScript變量,然後再次調用JavaScript函數,將變量作爲參數來實現它的最佳方式?或者有什麼方法可以用於UIWebView?

回答

0

使用異步通信。爲Objective C例程提供一個Javascript函數,以使用任何需要的回覆參數回調Javascript。 Javascript回調函數甚至可以是通過URL方案發送到Objective C代碼的參數之一。

2

通過stringByEvaluatingJavaScriptFromString注入Javascript是絕對沒問題的。

另一個方向將經由webView:shouldStartLoadWithRequest:navigationType:

How to Properly Call ObjectiveC From Javascript(包括回調至JS)可以更好地處理描述更詳細地,源也包括在內。

樣品JS-代碼這使得目標C的returnValue的用途:

NativeBridge.call("objCMethod", ["firstArgument"], function (returnValue) { 
    if (returnValue) { 
     // whatever 
    } else { 
     // whatever 
    } 
}); 
+0

我已經有這部分工作。我的問題是,如何將信息返回給javascript函數。對不起,如果我不夠清楚。 – 2012-04-05 19:15:38

+0

在代碼的Objective C一側,如何將值返回給您發佈的腳本?我可以只使用常規返回鍵嗎?例如:' - (BOOL)objCMethod:(NSString *)myString {//做東西... return YES; }'。然後在JavaScript中,'returnValue'將具有值「是」的權利? – 2012-04-05 19:53:47

+0

有_could_可以像' - (BOOL)objCMethod:(NSString *)myString'這樣的方法。但實際上涉及更多的代碼。在該示例項目中(http://blog.techno-barje.fr/public/iphone-sdk/NativeBridge/NativeBridge-non-buggy.zip)查看'webView shouldStartLoadWithRequest','handleCall'和'returnResult'。 – 2012-04-05 20:15:28