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相互调用及传参数注意

相关推荐