#import <WebKit/WebKit.h>
-(WKWebViewConfiguration *)getWebviewConfig{
//创建网页配置对象
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
// 创建设置对象
WKPreferences *preference = [[WKPreferences alloc]init];
//最小字体大小 当将javaScriptEnabled属性设置为NO时,可以看到明显的效果
preference.minimumFontSize = 0;
//设置是否支持javaScript 默认是支持的
preference.javaScriptEnabled = YES;
// 在iOS上默认为NO,表示是否允许不经过用户交互由javaScript自动打开窗口
preference.javaScriptCanOpenWindowsAutomatically = YES;
config.preferences = preference;
// 是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放
config.allowsInlineMediaPlayback = YES;
//设置视频是否需要用户手动播放 设置为NO则会允许自动播放
config.mediaTypesRequiringUserActionForPlayback = YES;
//设置是否允许画中画技术 在特定设备上有效
config.allowsPictureInPictureMediaPlayback = YES;
//设置请求的User-Agent信息中应用程序名称 iOS9后可用
config.applicationNameForUserAgent = @"ChinaDailyForiPad";
//自定义的WKScriptMessageHandler 是为了解决内存不释放的问题
// WeakWebViewScriptMessageDelegate *weakScriptMessageDelegate = [[WeakWebViewScriptMessageDelegate alloc] initWithDelegate:self];
// //这个类主要用来做native与JavaScript的交互管理
// WKUserContentController * wkUController = [[WKUserContentController alloc] init];
// //注册一个name为jsToOcNoPrams的js方法
// [wkUController addScriptMessageHandler:weakScriptMessageDelegate name:@"share"];
// config.userContentController = wkUController;
//用完记得移除
//移除注册的js方法
//[[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"];
return config;
}
-(void)initWebview{
//初始化
self.webview = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight) configuration:[self getWebviewConfig]];
// 是否允许手势左滑返回上一级, 类似导航控制的左滑返回
self.webview.allowsBackForwardNavigationGestures = YES;
self.webview.UIDelegate = self;
self.webview.navigationDelegate = self;
[self.view addSubview:self.webview];
}
#pragma mark - WKNavigationDelegate
// 页面开始加载时调用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
}
// 当内容开始返回时调用
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
}
// 页面加载完成之后调用 加载完成对js进行处理
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
NSMutableString *str = [NSMutableString string];
//去掉webview中标题
[str appendString:@"var header = document.getElementsByTagName(\'header\')[0];"];
[str appendString:@"header.parentNode.removeChild(header);"];
//移除网页中的评论
[str appendString:@"document.getElementsByClassName('comment')[0].remove();"];
[webView evaluateJavaScript:str completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"didFinishNavigation %@",result);
}];
}
// 页面加载失败时调用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{
}
// 接收到服务器跳转请求之后调用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
}
// 在收到响应后,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
NSLog(@"%@",navigationResponse.response.URL.absoluteString);
//允许跳转
decisionHandler(WKNavigationResponsePolicyAllow);
//不允许跳转
//decisionHandler(WKNavigationResponsePolicyCancel);
}
// 在发送请求之前,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"%@",navigationAction.request.URL.absoluteString);
//允许跳转
decisionHandler(WKNavigationActionPolicyAllow);
//不允许跳转
//decisionHandler(WKNavigationActionPolicyCancel);
}
系统分享
-(void)shareEvent{
NSString *titleUrl = [self.dict objectForKey:@"title"];
NSString *url = [self.dict objectForKey:@"url"];
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:@[titleUrl,url] applicationActivities:nil];
activityVC.definesPresentationContext = YES;
//不出现在活动项目
//activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
[self presentViewController:activityVC animated:YES completion:nil];
//分享之后的回调
__weak typeof(activityVC) weekActivity = activityVC;
activityVC.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
[weekActivity dismissViewControllerAnimated:YES completion:nil];
if (completed) {
NSLog(@"completed");
//分享 成功
} else {
NSLog(@"失败");
//分享 取消
}
};
}
网友评论