iOS与JS交互,OC调用JS方法,JS调用OC方法,URL解码
来源:互联网 发布:网易人工智能事业部 编辑:程序博客网 时间:2024/05/22 06:06
首先 iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了。
第一步:导入framework
OC 调用JS方法 :(一句话即可)
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
// JS url加载完成后,可直接调用JS方法showmessage。 如果有需求,还可以传递参数。
[myWebView stringByEvaluatingJavaScriptFromString:@"showmessage('参数')"];
// 若JS有返回值此方法会直接返回。返回的格式为URL编码格式,所以必须解码才能使用。 下边是解码方法
例如: NSString *data = [myWebView stringByEvaluatingJavaScriptFromString:@"showmessage('参数')"];
}
// URL 解码
- (NSString *)decodeFromPercentEscapeString: (NSString *) input
{
NSMutableString *outputStr = [NSMutableString stringWithString:input];
[outputStr replaceOccurrencesOfString:@"+"
withString:@" "
options:NSLiteralSearch
range:NSMakeRange(0, [outputStr length])];
return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
JS调用OC方法:
// webView 的代理方法, 网页加载之前调用。看到之前有同学提供的例子。
首先在js中声明方法
- <html>
- <head>
- <meta http-equiv="content-type"content="text/html;charset=utf-8">
- <title>js调用oc</title>
- <script type="text/javaScript">
- /* 调用本地带参数的方法 */
- function testFunction1(cmd,parameter1){
- return document.location="objc://"+cmd+":/"+parameter1; //cmd代表objective-c中的的方法名,parameter1自然就是参数了
- }
- /* 调用本地不带参数的方法 */
- function testFunction2(cmd){
- return document.location="objc://"+cmd; //cmd代表objective-c中的的方法名
- }
- </script>
- </head>
- <body>
- <p><button type="text" id="text1" value="点击这里1"onclick="testFunction1('printLog:','str')">调用本地带参数的方法</button></p>
- <p><button type="text" id="text2" value="点击这里2"onclick="testFunction2('testFunc')">调用本地不带参数的方法</button></p>
- </body>
- </html>
再调用webview代理
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- NSString *urlString = [[request URL] absoluteString];
- NSArray *urlComps = [urlStringcomponentsSeparatedByString:@"://"];
- if([urlComps count] && [[urlCompsobjectAtIndex:0] isEqualToString:@"objc"])
- {
- NSArray *arrFucnameAndParameter = [(NSString*)[urlCompsobjectAtIndex:1] componentsSeparatedByString:@":/"];
- NSString *funcStr = [arrFucnameAndParameterobjectAtIndex:0];
- if (1 == [arrFucnameAndParametercount])
- {
- // 没有参数
- if([funcStr isEqualToString:@"testFunc"])
- {
- /*调用本地函数*/
- [self testFunc];
- }
- }
- else if(2 == [arrFucnameAndParametercount])
- {
- //有参数的
- if([funcStr isEqualToString:@"printLog:"] && [arrFucnameAndParameterobjectAtIndex:1])
- {
- /*调用本地函数*/
- [self printLog:@"js调用本地带参数的方法成功!"];
- }
- }
- return NO;
- };
- return YES;
- }
- - (void)printLog:(NSString *)str
- {
- NSLog(@"%@", str);
- }
- - (void)testFunc
- {
- NSLog(@"js调用本地不带参数的方法成功!");
- }
- iOS与JS交互,OC调用JS方法,JS调用OC方法,URL解码
- iOS js调用oc方法
- oc调用js方法
- JS与原生OC互相调用方法
- iOS-JS调用OC
- iOS JS 交互之利用系统JSContext实现 JS调用oc方法
- OC与JS交互方法(一)拦截URL
- iOS js和OC方法交互
- 【iOS】OC与JS交互 网页中调用JS与JS注入
- OC与JS的交互方法
- iOS OC与js交互
- IOS中OC与JS互相调用
- iOS下JS与OC互相调用
- js调用oc方法(ios自学笔记)
- 在iOS平台上使用js直接调用OC方法
- iOS中OC调用js方法简述(一)
- JS调用OC方法(1)
- JS调用OC方法(JavaScriptCore)
- 邓白氏编码(duns number)申请以及填写方法-苹果开发者申请必用
- ./configure 参数详解
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- Linux安装卸载MySQL以及修改MySQL初始密码
- 《Java EE 实用教程》读后记录
- iOS与JS交互,OC调用JS方法,JS调用OC方法,URL解码
- C++实验四
- css隐藏过长的多余溢出文字的方法
- leetcode——341——Flatten Nested List Iterator
- C++第5次上机实验
- hdu2444
- javascript设计模式介绍(七)稳妥构造函数模式
- 编译与静态链接
- elasticsearch更改mapping(不停服务重建索引)