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和本機代碼之間傳遞對象。
檢查此鏈接http://stackoverflow.com/questions/1662473/how-to-call-從服務器傳遞objective-c-from-javascript –
@anoop如果我使用這種方式,我希望我不能從js傳遞對象到客觀的C.如果我可以傳遞對象。請讓我知道的方式。 – user1878200
在objective-c中創建一個Data類(原型),並從服務器獲取所有屬性。填寫該數據類。 –