美文网首页
WKWebView的使用

WKWebView的使用

作者: 雪域红鹰 | 来源:发表于2023-06-12 13:58 被阅读0次
#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(@"失败");
                //分享 取消
            }
        };
}

相关文章

网友评论

      本文标题:WKWebView的使用

      本文链接:https://www.haomeiwen.com/subject/othqydtx.html