10行代码完成JS-OC交互逻辑清晰简洁易懂

来源:互联网 发布:python 读取zip文件 编辑:程序博客网 时间:2024/05/16 14:13

最近公司项目中频频出现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 URLscheme] 对应   WVJBIframe.src = 'my://bra';中的 my

        [[request URLhost]        对应   WVJBIframe.src = 'my://bra';中的 bra

        

        scheme和host都是URL自带的属性 直接调用即可


        这时候我们就可以和服务端约定好  不同的scheme对应不同的host

        再根据不同的scheme做不同的逻辑处理


       if([[[request URLschemeisEqualToString:@"my"]){

          //do

           NSLog(@"url 的host ----%@",[[request URLhost]);

       }

       return YES;

}






0 0