iOS_webView与JS交互
来源:互联网 发布:自学java多久能就业 编辑:程序博客网 时间:2024/05/17 07:01
关于交互网上方式有好多种, 万变不离其宗的就是实现delegate的方法,
那么我们来看看webView的代理.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;- (void)webViewDidStartLoad:(UIWebView *)webView;//已经开始加载- (void)webViewDidFinishLoad:(UIWebView *)webView;//结束加载- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;//请求出错
有这么4个方法。
下面三个没有返回值的就不说了, 我们来看第一个
第一个在webV每次加载前都会被调用,如果返回NO,则表示不允许加载当前请求, 所以, 我们可以把请求判断写在这个方法里
@property (nonatomic, copy) NSString * requestPath;@property (nonatomic, copy) NSString * pageUrl;//要请求的h5地址
- (void)viewDidLoad { [super viewDidLoad]; [self setUpWebView];}- (void)setUpWebView{ NSURL * url = [NSURL URLWithString:_pageUrl];//_pageUrl UIWebView * webView = [[UIWebView alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; webView.scalesPageToFit = YES; webView.delegate = self; self.webView = webView; NSURLRequest * request =[[NSURLRequest alloc]initWithURL:url]; [webView loadRequest:request]; [webView setUserInteractionEnabled:YES]; [self.view addSubview:webView];}
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ NSString * requestPath = request.URL.path; NSString * str = [request.URL absoluteString]; NSString * requestStr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];//转码,防止有空格 //判断是否为动态请求 if ([requestPath isEqualToString:@"/"]) { _requestPath = requestPath; } if ([_requestPath isEqualToString:@"/"]) { return YES; } //判断是否加载 if (![requestStr isEqualToString:_pageUrl]) { NSString * productStr = [[requestStr componentsSeparatedByString:@"productId="] lastObject]; NSString * productId = [[productStr componentsSeparatedByString:@"&"] firstObject]; //判断 productId 是否存在, 不存在则不跳转 if ([productId isEqualToString:requestStr]) { return YES; } [self pushToGroupDetailWithProductId:productId]; return NO; } return YES;}
其中有涉及到一点点得动态请求, 顺便提一下, 主要是根据后缀来判断的,
顺便提一句,有些请求可能链接相同, 内容是会变的, webView自带缓存, 最好在结束加载的时候清一下缓存
- (void)webViewDidFinishLoad:(UIWebView *)webView{ MLog(@"页面加载完毕"); /** * 清除UIWebView的缓存 */ [[NSURLCache sharedURLCache] removeAllCachedResponses];}
相同点: 都是ASCII编码,都存在HTML代码,都能包含脚本语言代码,都存在Web服务器上
不同点:静态请求页面后缀一般以.htm或者.html结尾,而动态请求网页一般以.shtm或者.shtml结尾
注: 代码中判断动态请求的代码是可以省略的, 下边的代码也是可以实现的, 只是这样写效率会比不加好一点
0 0
- iOS_webView与JS交互
- ios_webView
- iOS_webView
- Flash与JS交互
- AS3与JS交互
- ActiveX与JS交互
- siverlight与js交互
- js与c#交互
- flex与js交互
- ActiveX与JS交互
- iphone 与 js 交互
- CDHtmlDialog与js交互
- webview与js交互
- applet与js交互
- webview与js交互
- AS 与 JS 交互
- uiwebview与js交互
- webview与js交互
- 新年新气象
- Ubuntu 15.04下安装Apache 2.4.16
- html 灰度
- 古风摄影《月华淡1》之华一
- (转)IsNull和IsEmpty的区别
- iOS_webView与JS交互
- MySQL 支持GeoDjango的简单说明
- Spring定时任务的几种实现
- 微信公众平台修改服务器配置时token验证失败
- Socket编程实践(1) --TCP/IP简述
- 中文分词器分词效果的评测方法
- 学习笔记:Android基本组件之Activity
- ros 安装 urdf 包
- Socket编程实践(2) --Socket编程导引