Objective-C UIWebview JS 交互
2024-09-06 03:37:19
一、在OC中调用网页中的 js 方法。
Objective-C 代码
[self.webView stringByEvaluatingJavaScriptFromString:@"alertMessage('弹窗')"];
网页 JS 中方法
function alertMessage(message) {
alert(message);
}
二、网页超链接调用Objective-C中的方法
1.设置webView的代理<UIWebViewDelegate>
2.实现代理方法shouldStartLoadWithRequest:(该方法当url加载的时候会自动执行)
网页代码
<a href="client://addImg/headImg">点我调用OC方法</a>
Objective-C 核心代码
#pragma mark UIWebViewDelegate 方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { // 可以直接拿到发送请求的网址
NSString *urlStr = request.URL.absoluteString; if ([urlStr hasPrefix:@"client://"]) { // 判断请求是不是以 client:// 开头 //获得去除请求头的 url 路径
NSString *urlContent = [urlStr substringFromIndex:[@"client://" length]]; //用 / 来拆分字符串
NSArray *urls = [urlContent componentsSeparatedByString:@"/"]; NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; // 从url获取方法名,带参数的方法,加冒号 SEL callFun = NSSelectorFromString(funName); //取消警告
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Warc-performSelector-leaks" [self performSelector:callFun withObject:urls[1]]; // 调用 OC 中的方法,并且传递参数 return NO;
} return YES;
} #pragma mark 此方法通过网页调用
-(void)addImg:(NSString *) headImg { NSLog(@"通过网页调用OC方法:%@",headImg);
}
三、Objective-C 注入JS到网页
Objective-C 核心代码
- (void)jsClick {
[self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { " //定义myFunction方法
"var field = document.getElementsByName('word')[0];"
"field.value='WWDC2014';"
"document.forms[0].submit();"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"]; //添加到head标签中 [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];
}
最新文章
- 恢复MySQL主从数据一致性的总结
- Mariadb 数据库写入中文乱码问题
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
- AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
- Web开发中的主要概念
- c# Winforms WebBrowser - Clear all cookies
- memcached 学习(一)
- 如何为可扩展系统进行Java Socket编程
- SQL server 2012 如何取上个月的最后一天
- The Greate Wall 相关网络知识(一)域名劫持
- OC中对象拷贝概念
- 开源纯C#工控网关+组态软件(九)定制Visual Studio
- 分享自己写的一个.net方法缓存源码
- Spring开始
- Web方面的错误, 异常来自hresult:0x80070057(E_INVALIDARG)
- win2003远程桌面怎么切换到多用户?
- oracle rac的启动与停止
- centos 7 修改host文件
- 在WPF中使用全局快捷键
- 【BZOJ】【3170】【TJOI2103】松鼠聚会
热门文章
- 20175203 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
- gradle spring 配置解释
- <;读书笔记>;Javascript系列之6种继承(面向对象)
- day 97 VUE第一天
- Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017) - original tests edition
- Selenium:三种等待方式详解
- java多线程学习笔记(七)
- 2019PhpStrom注册码(破解)+汉化(中文)
- Python基础代码1
- javaIO流(四)--输入与输出支持