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: 帮助需要帮助的人 就这样。。。。
- iOS每日一记之———————————————JS调用OC的代码(客户端实现)
- iOS每日一记之——————————OC代码混淆
- iOS 每日一记 之—— application的生命周期
- js 调用oc——webView
- iOS每日一记之———————复制 粘贴 转发功能的实现
- iOS——WebViewJavascriptBridge实现OC与JS交互
- ios ——JS 与OC混编
- iOS每日一记——————之简单的去重操作。。。。
- IOS开发—JS调用OC(通过非URL的方式)
- iOS每日一记————————简单的实现委托 Block代码块 功能 和简单的自定义View
- 每日一题(53)—— 评价代码片段
- iOS每日一记 ——————之 友盟页面统计
- iOS每日一记之——————iOS9系统策略更新
- ios基础——OC语法代码块的运用
- iOS每日一记——————一些常用的小技巧(一)
- 每日一题——实现取最小值的栈
- 每日一题——memcpy,strcpy,memmove的实现
- 每日一题——atoi,itoa函数的实现
- 号称全球最快电动摩托车 限量50台价格不菲
- 杭电oj-An Easy Task
- ecshop警告
- 静态代理、JDK与CGLIB动态代理、AOP+IoC
- 聊天机器人 AIML文件 <bot>标签解释(四)
- iOS每日一记之———————————————JS调用OC的代码(客户端实现)
- Hibernate 查询MatchMode的四种模式
- 课堂在线Java程序设计 哥德巴赫猜想
- 用JS做一个简单的电商产品放大镜功能
- 百度地图android6.0以上地图不显示
- Python实现二叉树
- OpenCV—基本矩阵操作与示例
- python 中文字符乱码的问题
- Linux I/O多路转接----poll模型