一、在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();"];
}

最新文章

  1. 恢复MySQL主从数据一致性的总结
  2. Mariadb 数据库写入中文乱码问题
  3. 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
  4. AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
  5. Web开发中的主要概念
  6. c# Winforms WebBrowser - Clear all cookies
  7. memcached 学习(一)
  8. 如何为可扩展系统进行Java Socket编程
  9. SQL server 2012 如何取上个月的最后一天
  10. The Greate Wall 相关网络知识(一)域名劫持
  11. OC中对象拷贝概念
  12. 开源纯C#工控网关+组态软件(九)定制Visual Studio
  13. 分享自己写的一个.net方法缓存源码
  14. Spring开始
  15. Web方面的错误, 异常来自hresult:0x80070057(E_INVALIDARG)
  16. win2003远程桌面怎么切换到多用户?
  17. oracle rac的启动与停止
  18. centos 7 修改host文件
  19. 在WPF中使用全局快捷键
  20. 【BZOJ】【3170】【TJOI2103】松鼠聚会

热门文章

  1. 20175203 2018-2019-2 实验一《Java开发环境的熟悉》实验报告
  2. gradle spring 配置解释
  3. &lt;读书笔记&gt;Javascript系列之6种继承(面向对象)
  4. day 97 VUE第一天
  5. Egyptian Collegiate Programming Contest 2017 (ACM ECPC 2017) - original tests edition
  6. Selenium:三种等待方式详解
  7. java多线程学习笔记(七)
  8. 2019PhpStrom注册码(破解)+汉化(中文)
  9. Python基础代码1
  10. javaIO流(四)--输入与输出支持