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

来源:互联网 发布:裤子品牌 知乎 编辑:程序博客网 时间:2024/06/05 08:07

(⊙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
原创粉丝点击