1

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 とネイティブ コードの間でオブジェクトを渡す必要があることに注意してください。

4

1 に答える 1

0

我々の議論に従って、

これがこの問題を解決する方法です。

大変な作業ですが、やりたいことは達成できます。

-サービスを呼び出すと、すべてのオブジェクトのコンテンツを xml で送信できます。

- その xml を解析し、データ クラスを形成します。

- その xml からデータ クラスを構築します。

-最終的に、JSを使用してサーバーから渡したいオブジェクトのコピーがcocoaに作成されます

于 2012-12-05T11:03:51.773 に答える