iOS每日一记之———————————————JS调用OC的代码(客户端实现)

(⊙v⊙)嗯 需求是webView上面的一个按钮 点击按钮调用本地的保存图片方法

说白了就是 客户端实现图片保存本地 然后放出一个接口 让JS去掉用 OK 下面说解决方法

之前一直用的是这种

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

通过URL去拦截  NSString *codeInfo = [request.URL absoluteString];  从codeInfo中去获得你要做的操作  代码多且复杂。。。

下面说下第二种方法 通过JavaScriptCore 这个库 这个是iOS7之后的 它把 WebKit 的 JavaScript 引擎用 Objective-C 封装,让JavaScript与Objective-C之间的通信变的非常简单。首先导入JavaScriptCore.framework框架。

假如说JS端是这么写的

$(function () {
            $("#testImage").click(function () {
                var imageUrl = $(this).attr("src");
                xys.save2Photos(imageUrl);
});

那我们客户端在.h中就要这么去写

#import <JavaScriptCore/JavaScriptCore.h>

@protocol XYSJSExport <JSExport>

//JSExportAs这是个宏定义必须要写的!!!!切记

//save2Photos 是JS要调用你的方法名必须要和JS端的方法名相同!!!切记

//- (void)savePhotos:(NSString *)imageUrl 你自己定义的代理回调方法

JSExportAs(save2Photos, - (void)savePhotos:(NSString *)imageUrl);

.m中是这样的

//把你刚刚的代理导进去

@interface ArticleDetailViewController ()<UIWebViewDelegate,NJKWebViewProgressDelegate,JSShareViewDelegate,XYSJSExport>

//然后创建一个属性

@property(nonatomic,strong)JSContext *context;

//之后

#pragma mark  -- js调用OC
- (void)webViewDidFinishLoad:(UIWebView *)webView
{

    __weak typeof (self) weakSelf = self;
    self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    self.context[@"xys"] = weakSelf;
}

#pragma mark - 保存图片
- (void)savePhotos:(NSString *)imageUrl{
  //在这里实现你的保存图片方法就行了。。。。
}


OK 搞定收工。。。。。。   


PS: 帮助需要帮助的人 就这样。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值