最近公司项目中频频出现JS和Object-C的交互。
昨天又用到了,
同事正好给了一个简易的html页面让我进行调试
逻辑和原理很简单。
随手写一个博客给
对js object-c交互还比较懵逼的新手看一下。
原理:判断URL的头部和内容进行逻辑处理
oc调js只要通过webView的
stringByEvaluatingJavaScriptFromString方法调用js代码即可 没什么可说的。
JS调用OC
网上写有很多。有点花哨
我这里写一个最最简单的例子
html页面一个名为 “生成” 的button 点击一下 传给我们一个内容为"my://bra"的URL
html页面内容
---------------------------------------------------------------------------------
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta charset="UTF-8">
<title>test</title>
<script type="text/javascript" src="js/jquery-1.7.2.min.js" ></script>
<!--<script type="text/javascript" src="js/html2canvas.js" ></script>-->
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div>
</div>
<button onclick="BaseClass()" style="margin-left:100px">
生成
</button>
</body>
</html>
<script>
function BaseClass(){ 这里是按钮的方法
声明一个js变量
var WVJBIframe = document.createElement('iframe');
设置属性
WVJBIframe.style.display = 'none';
配置请求链接
WVJBIframe.src = 'my://bra';
发送请求链接,发送这个链接后我们的webView就可以捕获这个链接进行交互
document.documentElement.appendChild(WVJBIframe);
}
</script>
-----------------------------------------------------------------------------------------------------
下面来看一下Object-C的代码
UIWebView处理链接的方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
参数 [[request URL] scheme] 对应 WVJBIframe.src = 'my://bra';中的 my
[[request URL] host] 对应 WVJBIframe.src = 'my://bra';中的 bra
scheme和host都是URL自带的属性 直接调用即可
这时候我们就可以和服务端约定好 不同的scheme对应不同的host
再根据不同的scheme做不同的逻辑处理
if([[[request URL] scheme] isEqualToString:@"my"]){
//do
NSLog(@"url 的host ----%@",[[request URL] host]);
}
return YES;
}