2012-12-05 83 views
1

我正在開發iOS的混合應用程序。爲了實現Javascript和本地代碼之間的雙向通信,我使用了第三方庫Webviewjavascriptbridge。這是我正在使用的代碼。Objective-C - Javascript通訊

//pkViewcontroller.h 
@class WebViewJavascriptBridge; 
@property (strong, nonatomic) WebViewJavascriptBridge *javascriptBridge; 
@property (strong, nonatomic) IBOutlet UIWebView *webView; 
//pkViewcontroller.m 
- (void)viewDidLoad 
{ 
    [WebViewJavascriptBridge enableLogging]; 
    _bridge= [WebViewJavascriptBridge bridgeForWebView:_webView handler:nil]; 
    NSString *path=[[NSBundle mainBundle]pathForResource:@"index" ofType:@"html"]; 
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]; 
    [_webView loadRequest:request]; 

    [_bridge registerHandler:@"testObjcCallback" handler:^(id data, WVJBResponse *response) { 
    NSLog(@"after getContactBttnTapped method call"); 
    ABPeoplePickerNavigationController *picker=[[ABPeoplePickerNavigationController alloc]init]; 
    picker.peoplePickerDelegate= self; 
    [self presentViewController:picker animated:YES completion:nil]; 
    }]; 
} 

HTML文件

<html> 
    <head> 
    <meta charset="utf-8"> 
    <script type="text/javascript" src="test.js"></script> 
    </head> 
    <body> 
    <input type="Button" value="ChooseContact" onClick="ChooseContactTapped()"> 
    </body> 
</html> 

test.js

var bridge 
window.onerror = function(err) { 
    alert('window.onerror: ' + err) 
} 
document.addEventListener('WebViewJavascriptBridgeReady', onBridgeReady, false) 
function onBridgeReady(event) { 
    bridge = event.bridge 
} 

function ChooseContactTapped(){ 
    bridge.callHandler('testObjcCallback', {'foo': 'bar'}, function(response) { 
    log('Got response from testObjcCallback', response) 
    }) 
} 

的JS文件將駐留在服務器上。現在我想調用我的本地方法,而無需在JS文件中編寫代碼。請幫幫我。如果我所做的是不正確的,請爲我提供一種在本地代碼和Javascript之間進行通信的方法。請注意,JS文件將在服務器上,我也需要在JS和本機代碼之間傳遞對象。

+0

檢查此鏈接http://stackoverflow.com/questions/1662473/how-to-call-從服務器傳遞objective-c-from-javascript –

+0

@anoop如果我使用這種方式,我希望我不能從js傳遞對象到客觀的C.如果我可以傳遞對象。請讓我知道的方式。 – user1878200

+0

在objective-c中創建一個Data類(原型),並從服務器獲取所有屬性。填寫該數據類。 –

回答

0

根據我們的討論,

下面是解決這個問題的方法。

這是一項相當艱鉅的任務,但您可以達到您想要的目標。

- 一個服務,你可以發送所有對象的內容在XML中。

-Parse that xml and form a data class。

- 從該XML生成一個Data類。

- 在結束時,你將有對象的可可副本,您希望使用JS