2014-11-25 75 views
1

我知道iOS和javascript之間的通信方式是在JS中創建假的URL並追加一個字符串作爲參數用於Objective-C代碼並解析該URL在此委託方法:javascript和objective-c之間的通信

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

通過調用本地方法stringByEvaluatingJavaScriptFromString與參數CALLID再次然後發送返回值。

但我想,就像Android一樣,直接從JS調用Objective-C方法並獲得返回值。而不需要在JavaSCript中編寫任何方法來獲取返回值。其實我們已經有JS代碼了。在與Android進行通信時,它非常完美。

是否有任何技巧來解決我的問題,將在AppStore上批准?

回答

1

沒有內置方法來執行此操作,但是您可以使用WebViewJavascriptBridge這樣的庫:https://github.com/marcuswestin/WebViewJavascriptBridge

即使有內置解決方案,也沒有這方面的標準。因此,無論哪種方式,它都不會像在Android上那樣工作。使用Obj-C代碼進行通信意味着您正在從瀏覽器轉向特定於平臺的實現,實際上,這些實現在不同平臺之間有所不同。

0

如果我正確地理解你的問題,你想調用來自然後在下面的Java腳本的Objective-C的方法是我從Apple Documentation提到的例子: -

我們來看一個示例類。在這種情況下,我們將創建一個Objective-C地址簿類並將其公開給JavaScript。讓我們先從類定義:

@interface BasicAddressBook: NSObject { 
} 
+ (BasicAddressBook *)addressBook; 
- (NSString *)nameAtIndex:(int)index; 
@end 

現在,我們將編寫代碼來發布BasicAddressBook實例的JavaScript:

BasicAddressBook *littleBlackBook = [BasicAddressBook addressBook]; 

id win = [webView windowScriptObject]; 
[win setValue:littleBlackBook forKey:@"AddressBook"]; 

一旦公開這些方法的JavaScript(在本月底描述部分),您應該能夠從JavaScript環境訪問您的基本通訊錄,並使用標準JavaScript函數對其執行操作。

現在,讓我們舉一個例子來說明如何在JavaScript中使用BasicAddressBook類實例。在這種情況下,我們將在我們的地址簿中的某個索引處打印一個人的姓名:

function printNameAtIndex(index) { 
    var myaddressbook = window.AddressBook; 
    var name = myaddressbook.nameAtIndex_(index); 
    document.write(name); 
} 
+0

謝謝shabbier,但是這個功能在mac開發中。我想要iOS。我無法在iOS中使用此功能。這樣的IOS有什麼程序嗎? – Mahesh 2014-12-04 04:45:29

+0

檢查此鏈接http://stackoverflow.com/questions/3501618/how-to-use-windowscriptobject-on-the-iphone ?? – 2014-12-04 04:50:34