繁体   English   中英

Objective-C-Javascript通信

[英]Objective-C - Javascript communication

我正在为iOS开发混合应用程序。 为了实现Javascript与本机代码之间的双向通信,我使用了第三方库Webviewjavascriptbridge 这是我正在使用的代码。

//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与本机代码之间传递对象。

根据我们的讨论,

这是解决此问题的方法。

这是一项艰巨的任务,但是您可以实现自己想做的事情。

-调用服务,然后可以将所有对象的内容发送到xml中。

-解析该xml并形成一个数据类。

-从该xml构建数据类。

-最后,您将拥有一个可可对象的副本,您希望使用JS从服务器传递该副本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM