UIWebView与js通信

来源:互联网 发布:vivo手机mac地址修改 编辑:程序博客网 时间:2024/06/05 12:23

    自从去年换工作之后,大致有半年时间没写博客了,主要是现在所处的公司项目是从零开始,而且入职的时候Andriod同事已经来了一个多月了,所以我基本每天都是赶工的状态,现在项目已经迭代了好几个版本,算是属于稳定的状态,今天所分享的是在项目中用到的js交互相关的知识点。

    交互无非就是客户端将数据传递给js(js那边想要我们的数据,比如token等)、js将数据传递给客户端(我们这边想要js给的某个属性id)两种情况。

一:客户端将数据传递给js又分为两种

1:js主动调用我们客户端的方法获取我们这边传递过去的值

2:我们主动将值传递给js

针对第一种情况,我会利用实例讲解,项目就是采取这种技术实现的

第一步:首先创建JSContext对象(此处通过键值获取该对象),得到系统js对象

JSContext *context=[self.wedview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];


第二步:js是通过对象调用得到数据的(我们这边必须和前端对象名保持一致),假如前端要主动获取我们的token的值,而他们前端有一个对象是MyToken,他们应该是通过MyToken.getToekn()方法获取token数据,那我们这边的该怎么操作呢,

a:

首先我们也得创建一个对象(自定义继承NSObject),但是对象的协议方法必须是getToekn(),和前端保持一致

#import <JavaScriptCore/JavaScriptCore.h>@protocol TokenProtocol <JSExport>- (NSString * )getToken;@end
@interface Token : NSObject<TokenProtocol>///定义block,回调到控制器中;@property (nonatomic,copy)NSString *(^showPickerBlock)();@end

@implementation Token//前端会主动调这个方法  然后我们这边通过block将值返回给他们- (NSString *)getToken{//       NSLog(@"getToken   %@",self.showPickerBlock());       return self.showPickerBlock(); }@end


b:自定义对象完成后,我们就可以创建该对象,然后通知block把值传递给前端

 Token *MyToken = [Token new];     NSString *bertoken = [[NSUserDefaults standardUserDefaults] objectForKey:@"token"];     [token setShowPickerBlock:^NSString *{                         return bertoken;      }];                   context[@"MyToken"]=token;

(我们这边必须和前端对象名保持一致)前面说的这句就是指context这个对象的key,当然我是直接从JSContext对象创建开始讲解的,,UIWebView加载url大家直接加上。


到这就能实现前端主动获取我们移动端这边的数据,从而展示界面




第二种方式就是我们这边触发了某个事件之后将值传递个前端,从未改变了页面的显示

先来看看前端方法


function alertName(msg) {

       alert('你好 ' + msg + ',我是js')

        }


alertName这个方法是前端定义好的,而参数就是我要传递给前端的数据,前端拿到数据之后就进行另一步的实现,


我们这边也是只需要和该方法同步就行


  [self.webView stringByEvaluatingJavaScriptFromString:@"alertName('我是张嘎')"];

在相应事件中执行上面的代码就可以把想要的数据传递给前端。到此也能实现简单的传值。







0 0
原创粉丝点击