#import <WebKit/WebKit.h>
-(WKWebViewConfiguration *)getWebviewConfig{
//創(chuàng)建網(wǎng)頁(yè)配置對(duì)象
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
// 創(chuàng)建設(shè)置對(duì)象
WKPreferences *preference = [[WKPreferences alloc]init];
//最小字體大小 當(dāng)將javaScriptEnabled屬性設(shè)置為NO時(shí)署拟,可以看到明顯的效果
preference.minimumFontSize = 0;
//設(shè)置是否支持javaScript 默認(rèn)是支持的
preference.javaScriptEnabled = YES;
// 在iOS上默認(rèn)為NO橄仆,表示是否允許不經(jīng)過用戶交互由javaScript自動(dòng)打開窗口
preference.javaScriptCanOpenWindowsAutomatically = YES;
config.preferences = preference;
// 是使用h5的視頻播放器在線播放, 還是使用原生播放器全屏播放
config.allowsInlineMediaPlayback = YES;
//設(shè)置視頻是否需要用戶手動(dòng)播放 設(shè)置為NO則會(huì)允許自動(dòng)播放
config.mediaTypesRequiringUserActionForPlayback = YES;
//設(shè)置是否允許畫中畫技術(shù) 在特定設(shè)備上有效
config.allowsPictureInPictureMediaPlayback = YES;
//設(shè)置請(qǐng)求的User-Agent信息中應(yīng)用程序名稱 iOS9后可用
config.applicationNameForUserAgent = @"ChinaDailyForiPad";
//自定義的WKScriptMessageHandler 是為了解決內(nèi)存不釋放的問題
// WeakWebViewScriptMessageDelegate *weakScriptMessageDelegate = [[WeakWebViewScriptMessageDelegate alloc] initWithDelegate:self];
// //這個(gè)類主要用來(lái)做native與JavaScript的交互管理
// WKUserContentController * wkUController = [[WKUserContentController alloc] init];
// //注冊(cè)一個(gè)name為jsToOcNoPrams的js方法
// [wkUController addScriptMessageHandler:weakScriptMessageDelegate name:@"share"];
// config.userContentController = wkUController;
//用完記得移除
//移除注冊(cè)的js方法
//[[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"];
return config;
}
-(void)initWebview{
//初始化
self.webview = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, kScreenHeight) configuration:[self getWebviewConfig]];
// 是否允許手勢(shì)左滑返回上一級(jí), 類似導(dǎo)航控制的左滑返回
self.webview.allowsBackForwardNavigationGestures = YES;
self.webview.UIDelegate = self;
self.webview.navigationDelegate = self;
[self.view addSubview:self.webview];
}
#pragma mark - WKNavigationDelegate
// 頁(yè)面開始加載時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
}
// 當(dāng)內(nèi)容開始返回時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation{
}
// 頁(yè)面加載完成之后調(diào)用 加載完成對(duì)js進(jìn)行處理
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
NSMutableString *str = [NSMutableString string];
//去掉webview中標(biāo)題
[str appendString:@"var header = document.getElementsByTagName(\'header\')[0];"];
[str appendString:@"header.parentNode.removeChild(header);"];
//移除網(wǎng)頁(yè)中的評(píng)論
[str appendString:@"document.getElementsByClassName('comment')[0].remove();"];
[webView evaluateJavaScript:str completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"didFinishNavigation %@",result);
}];
}
// 頁(yè)面加載失敗時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation{
}
// 接收到服務(wù)器跳轉(zhuǎn)請(qǐng)求之后調(diào)用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation{
}
// 在收到響應(yīng)后,決定是否跳轉(zhuǎn)
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
NSLog(@"%@",navigationResponse.response.URL.absoluteString);
//允許跳轉(zhuǎn)
decisionHandler(WKNavigationResponsePolicyAllow);
//不允許跳轉(zhuǎn)
//decisionHandler(WKNavigationResponsePolicyCancel);
}
// 在發(fā)送請(qǐng)求之前弱判,決定是否跳轉(zhuǎn)
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
NSLog(@"%@",navigationAction.request.URL.absoluteString);
//允許跳轉(zhuǎn)
decisionHandler(WKNavigationActionPolicyAllow);
//不允許跳轉(zhuǎn)
//decisionHandler(WKNavigationActionPolicyCancel);
}
系統(tǒng)分享
-(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;
//不出現(xiàn)在活動(dòng)項(xiàng)目
//activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll];
[self presentViewController:activityVC animated:YES completion:nil];
//分享之后的回調(diào)
__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(@"失敗");
//分享 取消
}
};
}