Dieser Artikel stellt hauptsächlich die detaillierte Erklärung und den Implementierungscode der Interaktion zwischen IOS OC und js vor. Freunde in Not können sich auf
Detaillierte Erklärung der Interaktion zwischen IOS beziehen OC und js
JS-Injection: JS-Code mit OC in die Webseite einfügen
JS-Injection wird auch als Interaktion zwischen OC und JS bezeichnet
OC- und JS-Interaktion erfordert eine Brücke (Vermittler), die die Proxy-Methode von UIWebView ist
Die Webseite lädt den ursprünglichen Inhalt
#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]; }
Verwenden Sie js in der Proxy-Methode von UIWebView zum Ändern der nativen Webseite
/// 网页加载完成之后调用的代理方法 : 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]; }
Abfangen des nativen Netzwerkanfrage-Webseitensprungs
imgTag.onclick = function(){window.location.href='https://www.baidu.com‘}
Wenn auf imgTag geklickt wird, werden aktiv Netzwerkanfragen gesendet
Der Zweck des aktiven Sendens von Netzwerkanfragen besteht darin, UIWebView in die Lage zu versetzen, meine benutzerdefinierte URL abzufangen
Verwenden Sie die benutzerdefinierte URL, um zu bestimmen/unterscheiden, ob das von mir angeklickte Label das von mir entworfene ist
Benutzerdefinierte und eindeutige URL, die angibt, dass der Klick ein eindeutiges Label ist
Zusammenfassend sind es zwei Schritte
Der erste Schritt: JS injiziert das Klickereignis des Etiketts und sendet aktiv eine benutzerdefinierte URL-Anfrage
Schritt 2: In UIWebView die benutzerdefinierte URL-Anfrage abfangen und dann die Anfrage
JS indirekt ermitteln ruft OC auf: JS- und OC-Interaktion
Die Proxy-Methode, die aufgerufen wird, wenn die Webseite gerade geladen wird: kann alle Netzwerkanforderungen auf der WebView abfangen
- (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; }
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung und Implementierungscode der Interaktion zwischen Javascript und IOS ObjectC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!