Objective-C与js相互调用及传参数注意
1、Objective-c调用js方法,只是需要调用uiwebview自带的方法就可以了。
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getHtmlString(‘%@’)",htmlStr]];
2、js调用Objective-c方法,这时就需要和js约定一个参数或者方法了。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
在这个回调方法中,我们会得到服务器传过来的数据request,我们可以判断穿过来的参数,然后进行判断调用oc的方法。
if ([request.URL.scheme isEqualToString:@"gethtmlstring"]) {
NSString *htmlStr = [self getHtmlString:description];
htmlStr = [htmlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"getHtmlString(\"%@\")",htmlStr]];
}
这样就实现了对Objective-C的调用了。
在这里特别值得注意的问题:我这里传了html格式的参数。我在这里就遇到了,传过去的参数始终不对,无法调用js的方法。
stringWithContentsOfFile,这个方法用来读取文件,如果不指定编码方式的话,有可能造成数据的丢失,所以我这里指定了utf-8的编码方式。 在传参数的时,还有可能的一种问题。这个参数里面如果带有(\r \n ')等等, js那边收不到这个值, 这些带\的需要转义, 如下这么写js才能收到完整的消息:
message = [message stringByReplacingOccurrencesOfString:@"\n" withString:@"\\\\n"];
NSString *jsMethod = [NSString stringWithFormat:@"JsMethod(\"%@\")", message]
例子代码:
具体下载目录在 /2013年资料/6月/9日/Objective-C与js相互调用及传参数注意