iOS中js与objective-c的简单交互
2015-11-05 13:48
141 查看
1、首先是objective-c调用js中的代码,可以用UIWebview中的一个方法 stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法 的返回值。 比如调用js中方法myFunction(),可以在代码中调用NSString *str = [self.webviewstringByEvaluatingJavaScriptFromString:@"myFunction();"];
2、js调用objective-c的方法就没那么简单了
首先在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调用本地不带参数的方法成功!");
}
相关文章推荐
- 浅析关于ObjectC中的自定义初始化方法和便利构造器以及重写父类的description方法的理解
- java.sql.ResultSet.getObject float 字段科学计数的处理
- 如何使用swfobject(中文版)
- Object C语法快速入门
- object-c 中括号[]
- 一些比较好的宏定义
- ObjC的initialize和init
- PIL中分离通道发生“AttributeError: 'NoneType' object has no attribute 'bands'”
- ThreadPool.RegisterWaitForSingleObject
- Error: ORA-16698: LOG_ARCHIVE_DEST_n parameter set for object to be added
- OC基础知识 -- 属性
- 解决a different object with the same identifier value was already associated with the session错误
- OC基础知识 -- Block
- OC基础知识 -- 常见类的一些方法
- NULL Nil nil NSNULL 关系与区别
- 关于EnumerateObjectsUsingBlock和for-in之间的较量
- org.hibernate.TransientObjectException
- 对于AttributeError: ‘module’ object has no attribute ‘AF_INET
- objective-c 关于 self 的用法总结
- OC基础知识 -- 基本行为方法