IOS ObjectC与javascript交互详解及实现代码

2025-05-29 0 52

IOS OC与js交互详解

JS注入 : 把JS代码有OC注入到网页

JS注入又叫做OC和JS的交互

OC和JS的交互需要一个桥梁(中介),这个桥梁就是UIWebView的代理方法

网页加载初始内容

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
#import "ViewController.h"

@interface ViewController ()<UIWebViewDelegate>

@property (weak, nonatomic) IBOutlet UIWebView *webView;

@end

- (void)viewDidLoad {

[super viewDidLoad];

// 设置webView的代理

self.webView.delegate = self;

// 加载网页数据

NSURL *URL = [NSURL URLWithString:@"http://m.dianping.com/tuan/deal/5501525"];

// NSURL *URL = [NSURL URLWithString:@"https://www.hao123.com/?tn=93321723_hao_pg"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

[self.webView loadRequest:request];

}

在UIWebView的代理方法里用js来更改原生网页

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18
/// 网页加载完成之后调用的代理方法 : JS注入 : OC调用JS代码

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

// 用于拼接JS代码的字符串

NSMutableString *stringM = [NSMutableString string];

// 拼接移除顶部导航的JS代码

[stringM appendString:@"var headerTag = document.getElementsByTagName('header')[0]; headerTag.parentNode.removeChild(headerTag);"];

// 拼接移除橙色按钮的JS代码

[stringM appendString:@"var footerBtnTag = document.getElementsByClassName('footer-btn-fix')[0]; footerBtnTag.parentNode.removeChild(footerBtnTag);"];

// 拼接移除底部布局的JS代码

[stringM appendString:@"var footerTag = document.getElementsByClassName('footer')[0]; footerTag.parentNode.removeChild(footerTag);"];

// 拼接给img标签添加点击事件的JS代码

[stringM appendString:@"var imgTag = document.getElementsByTagName('figure')[0].children[0]; imgTag.onclick = function(){window.location.href='https://www.baidu.com'};"];

// 这个方法就是UIWebView提供的.专门做JS注入的方法

[webView stringByEvaluatingJavaScriptFromString:stringM];

}

拦截原生网络请求网页跳转

?

1
imgTag.onclick = function(){window.location.href='https://www.baidu.com‘}

点击imgTag时,主动发送网络请求

主动发送网络请求的目的 : 就是为了让UIWebView能够拦截到我的自定义的URL

通过自定义的URL,判断 / 区别 我点击的标签是否是我设计的那个标签

自定义独一无二的URL,表示点击的是独一无二的标签

总结起来就是两步

第一步 : JS注入标签的点击事件,并主动发送一个自定义的URL的请求

第二步 : 在UIWebView里面.拦截自定义的URL的请求,然后判断请求

JS间接调用OC : JS和OC的交互

网页即将开始加载时调用的代理方法 : 可以拦截到webView上的所有的网络请求

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

{

// 获取拦截到的所有的请求

NSString *URLString = request.URL.absoluteString;

//https://m.baidu.com/?from=1015143h

// NSLog(@"%@",URLString);

if ([URLString isEqualToString:@"https://m.baidu.com/?from=1015143h"]) {

NSLog(@"我点击的是imgTag");

// 当我知道点击的是imgTag时,自动push

//http://www.csdn.net/

NSURL *URL = [NSURL URLWithString:@"http://www.csdn.net/"];

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

[self.webView loadRequest:request];

// TestViewController *testVC = [[TestViewController alloc] init];

// [self.navigationController pushViewController:testVC animated:YES];

// 因为这个地址是无效地址.不需要加载的

return NO;

}

// 返回YES的作用 : 表示你拦截到的请求,允许正常的发送出去;反之,不允许拦截到的请求发送出去

return YES;

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 IOS ObjectC与javascript交互详解及实现代码 https://www.kuaiidc.com/90538.html

相关文章

发表评论
暂无评论