【问题标题】:Objective-C - Javascript communicationObjective-C - Javascript 通信
【发布时间】:2012-12-05 07:56:15
【问题描述】:

我正在为 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 和本机代码之间传递对象。

【问题讨论】:

  • @anoop 如果我使用这种方式,我希望我不能将对象从 js 传递到目标 C。如果我可以传递对象。请告诉我方法。
  • 在objective-c中创建一个数据类(原型),并从你的服务器获取所有属性。填充该数据类。
  • @anoop 对不起,我不明白。能不能详细解释一下。
  • 这是一项艰巨的任务,但你可以实现你想做的事情,实际上我一年前做过同样的事情。我不拥有作为公司政策的代码。但我记得这个想法,它是:调用一个服务,你可以在xml中发送所有对象的内容。解析该 xml 并形成一个数据类。从该 xml 构建一个 Data 类。最后,您将拥有一份您希望使用 JS 从服务器传递的可可对象副本。

标签: javascript objective-c webview


【解决方案1】:

根据我们的讨论,

这是解决这个问题的方法。

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

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

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

-从该 xml 构建一个 Data 类。

-最后你会得到一个可可对象的副本,你希望使用 JS 从服务器传递它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多