2013/10/11

[Objective-C][iOS]UIWebViewのstringByEvaluatingJavaScriptFromStringについて一言

UIWebViewのstringByEvaluatingJavaScriptFromStringでJavaScriptの関数を実行する場合、return値をString型で返さないとNSStringに返却値が格納されないようだ。

例として以下のプログラムをあげる。

function hoge(){
  var j ={};
  return j;
}
上のJSは単純にJSONを返してくれる関数であり、これを実行するObjective-Cを下のように実装してみる。
UIWebView *webView;
NSString *ret = [webView stringByEvaluatingJavaScriptFromString:@"hoge();"];
で、結果として、retには何も設定されていない。

この場合、どうするのかというと、JSON.stringifyを使ってString型にする。
function hoge(){
  var j ={};
  return JSON.stringify(j);}
そんでもって、下のようにNSStringを一度、NSDataにした上でJSONをパースすればおk
UIWebView *webView;
NSString *ret = [webView stringByEvaluatingJavaScriptFromString:@"hoge();"];
NSData *retData = [ret dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:retData options:NSJSONReadingMutableContainers error:nil];
実際に使えるNSDictionaryにするまでに道のりが長くてちょっとめんどいです。

0 コメント:

コメントを投稿