(⊙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: 帮助需要帮助的人 就这样。。。。