App应用的html5页面经过运营商的移动网络(非wifi网络),被强制插入广告和手机管家的多余信息,在有些场景严重干扰用户的操作,也产生在美丽的页面上加入了不协调的悬浮层。并且这个手机管家类的悬浮层有时间出现,有时间不出现,神出鬼没,虽然你可以通过点击关闭,关键是突然出现,有时候还关闭不了。总之用户不喜欢这种用户不需要的选择,所以干掉它吧!
在app中h5页面源码,可以通过下面代码获得,其中url就是h5页面的源码,简单吧!
分析app收到WebViewJavascriptBridge的页面加载-(void)webViewDidFinishLoad:(UIWebView
*)webView { NSString *url = [NSString stringWithContentsOfURL:webView.request.URL encoding: NSUTF8StringEncoding error:nil]; if (webView.canGoBack) { self.exitButton.hidden=NO; }else { self.exitButton.hidden=YES; } }
通过分析,一个普通的页面,经过Wi-Fi网络,webViewDidFinishLoad只响应一次就能显示出页面。
经过移动手机网络,需要经过三次webViewDidFinishLoad调用,并且三次的h5源码都相同。
基本上从app无法很好的解决方案,除非你的页面只有一层,只让它成功调用次。若你的应用有二级页面很难控制了。
所以最终的解决方案是h5页面。只需要你访问的h5页面采用的是https不是http就能很好的解决这个问题,完美的解决DNS劫持。当然https需要你购买证书或者服务器自己做一个证书,具体https是后台开发的问题我是外行。
2017年1月1日,苹果商店禁止使用http的新应用上架,现在还允许包含http的应用上架,看来也没有一棍子打死。https是比http安全的多,虽然也有破解方案,但是对于防一般人窃取信息就够了。软件安全是相对的,防一般外行,不是防止一切"钻家"(黑客)的。很多人都会感觉黑客都是写软件很好的人,其实并非都如此,很多只对写代码了解皮毛,能简单写代码利用软件漏洞的人不在少数。
谷歌也将要拿http访问的网站开刀了,见文章《洒泪告别 神秘代码终被谷歌逼上绝路》。
WKWebView的h5页面(js页面)的源码获取和UIWebView皆然不同,需要协议拦截,但造成js的post请求的参数被清空的严重问题,所以只能在测试时使用或不需要发送带参数的post请求的js页面使用。具体参照文章《WKWebView采用HybridNSURLProtocol协议拦截图片等资源预加载》。代码片段如下:
- (void)viewDidLoad { [super viewDidLoad]; [self registerNSURLProtocolScheme]; } - (void)registerNSURLProtocolScheme { [NSURLProtocol wk_registerScheme:@"https"]; [NSURLProtocol wk_registerScheme:@"http"]; } -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ NSString *url = [NSString stringWithContentsOfURL:webView.URL encoding: NSUTF8StringEncoding error:nil]; NSLog(@"webView.URL:%@",url); }