在H5盛行的时代,在app当中难免需要去嵌套一些H5页面,作为iOS的“后生”
一开始就是用了WKWebView来实现H5页面的实现。😂
最近有一个需求:点击列表进入H5详情界面,上方的导航栏需要有分享和收藏,下方是H5界面,界面里面有一些链接可以点击,进入其他界面,其他界面也可以收藏和分享。
需求分析:目前WKWebView不可以点击外部链接,需要做相应的设置,才可以跳转到下一个界面,点击链接时候如何获取URL,并且截取去新的详情对应的ID,用来设置分享和收藏功能。
所以主要的问题就是如何获取当前的点击事件,并得到URL;
既然确定好问题所在,那么只需要针对问题去解决它就好了。
查找资料发现:
-(void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
可以实现链接事件的拦截
具体代码如下:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler {
// 允许链接跳转
decisionHandler(WKNavigationActionPolicyAllow);
// 获取新页面的URL
NSString *url = navigationAction.request.URL.absoluteString;
if (![url isEqualToString:self.urlString]) {
//从字符A中分隔成2个元素的数组
NSArray *array = [url componentsSeparatedByString:@"id="];
NSLog(@"array:%@",array);
// 改变页面的ID
self.newsId = [NSString stringWithFormat:@"%@",array[1]] ;
// 通过新ID重新获取页面数据
[self initWithData] ;
// 重新拼接路径 加载内容
self.urlString = [NSString stringWithFormat:@"https://你的域名/homePage/news?platform=Ios&id=%@",self.newsId] ;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString]]];
}
这样就实现了基本需求:具体问题具体对待;但思路都差不多。
这样就结束了,如有不足的地方,请多多指教,谢谢。
⚠️ ⚠️ ⚠️ ⚠️ ⚠️ 求职:本人实习生,最近想换个工作环境,如果觉得我还可以的话,请向我留言,安徽,杭州,南京地区的都可以。。