当前位置: 首页 > news >正文

iOS 利用UIWebView与JavaScript交互的最简单办法(本人已验证可行)

本贴转自:http://blog.csdn.net/h_o_w_e/article/details/28887005


1, UIWebView调用 JavaScript 的函数:

NSString* strValue = [webView stringByEvaluatingJavaScriptFromString:@"YourFunctionName('YourParameter')"];

上面这句就是调用 JavaScript里面自定义的函数 YourFunctionName(传入参数'YourParameter',取得返回值赋给strValue )


2,JavaScript (通过UIWebView)调用ObjC方法:

下面说到的是最简单、最通用的办法!!脚本写完之后可以丢到Android执行的:

就是利用UIWebView(Android的是WebView)拦截URL的功能!!!约定一个特殊URL,写在脚本,让上层去拦截分析!!比如,

在JavaScript写上:

window.location.href = "ABCD://XXXYYYZZZ"


在iOS里面:

实现UIWebViewDelegate下面这个函数(不要忘记设置 webView.delegate = self 这样细节)

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

{

          NSString* strXXX = request.URL.absoluteString;

          //假设只是分析 "ABCD://"

            NSRange range = [strXXX rangeOfString:@"ABCD://"];
             if( range.location != NSNotFound )
             {
                    //就在这里执行操作了!!!

            
                   return NO;//返回NO,表示取消对本次请求的导航

              }

        return YES;

}


//Android里面,利用WebView 重载这个函数也可以做到同样效果

public boolean shouldOverrideUrlLoading(WebView  view, String url) { 

return true;
}


这样,当JavaScript执行window.location.href = "ABCD://XXXYYYZZZ"这句,就触发上层的对应操作了!

也就是实现JavaScript调用上层ObjC函数的功能了


 

 

转载于:https://www.cnblogs.com/wmwblog/p/4983693.html

相关文章:

  • 2015-10-14 晴 tcp/ip
  • 00.Python manage.py shell和 Python的分析
  • Visifire实现统计图
  • SecureCRT系列:生成公私钥
  • 技巧之:恢复linux被误删文件(方案有3)
  • 非法词判断
  • 教你爱上Blocks(闭包)
  • 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
  • 导出excel
  • Oracle坑爹入门踩坑篇
  • GPU大百科全书索引(有助于理解openGL工作流程)
  • 数据结构实例参考——“查找”的原理
  • git clone Gtk-WARNING **: cannot open display
  • 利用MAVEN打包时,如何包含更多的资源文件
  • js ajax 1
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • crontab执行失败的多种原因
  • HTML中设置input等文本框为不可操作
  • Java 内存分配及垃圾回收机制初探
  • java8 Stream Pipelines 浅析
  • js数组之filter
  • Laravel核心解读--Facades
  • Shell编程
  • Theano - 导数
  • Vue组件定义
  • 安卓应用性能调试和优化经验分享
  • 七牛云假注销小指南
  • 使用API自动生成工具优化前端工作流
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通信类
  • 微信小程序填坑清单
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 学习笔记:对象,原型和继承(1)
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • Hibernate主键生成策略及选择
  • python最赚钱的4个方向,你最心动的是哪个?
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #if和#ifdef区别
  • #includecmath
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (2022 CVPR) Unbiased Teacher v2
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (三)终结任务
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)Linux+Windows下安装ffmpeg
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转载)Linux网络编程入门
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***测试-HTTP方法
  • .Net Memory Profiler的使用举例
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明