WKWebView 使用的一些踩坑记录

// WKwebVeiew  不能调用系统的长按复制 

处理方法

 // 选择CSS

    NSString *css = @"body{-webkit-user-select:auto;-webkit-user-drag:auto;}";

    

    // CSS选中样式

    NSMutableString *javascript = [NSMutableString string];

    [javascript appendString:@"var style = document.createElement('style');"];

    [javascript appendString:@"style.type = 'text/css';"];

    [javascript appendFormat:@"var cssContent = document.createTextNode('%@');", css];

    [javascript appendString:@"style.appendChild(cssContent);"];

    [javascript appendString:@"document.body.appendChild(style);"];

    

    // javascript注入

    WKUserScript *noneSelectScript = [[WKUserScript alloc] initWithSource:javascript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

    WKUserContentController *userContentController = [[WKUserContentController alloc] init];

    [userContentController addUserScript:noneSelectScript];

    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];

    configuration.userContentController = userContentController;

    

    _webView = [[MCWKWebView alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds)) configuration:configuration];

    _webView.scrollView.scrollEnabled = _scrollEnabled;

    _webView.navigationDelegate = self;

    _webView.UIDelegate = self;

    [self.view addSubview:_webView];

// WKwebVeiew 不能调用APPStore  

// 处理方式



    NSString *requestString = navigationAction.request.URL.absoluteString;

    NSLog(@"------requestString == %@",requestString);

    if ([requestString containsString:@"itunes.apple.com"]) {

        NSURL *url = navigationAction.request.URL;

        UIApplication *app = [UIApplication sharedApplication];

        NSLog(@"url.absoluteString == %@", url.absoluteString);

        

        if ([app canOpenURL:url]) {

            [app openURL:url];

            decisionHandler(WKNavigationActionPolicyCancel);

            return;

        }

    }

    

    decisionHandler(WKNavigationActionPolicyAllow);

// WKwebView 不能调用打电话 

//处理方式

NSURL *URL = navigationAction.request.URL;
    NSString *scheme = [URL scheme];
    UIApplication *app = [UIApplication sharedApplication];
    // 打电话
    if ([scheme isEqualToString:@"tel"]) {
        if ([app canOpenURL:URL]) {
            [app openURL:URL];
            // 一定要加上这句,否则会打开新页面
            decisionHandler(WKNavigationActionPolicyCancel);
            return;
        } 
    }

/**

 *  可以指定配置对象、导航动作对象、window特性

 *

 *  @param webView    实现该代理的webview

 *  navigation 当前navigation

 */


-(WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures

/**

 *  页面开始加载时调用

 *

 *  @param webView    实现该代理的webview

 *  @param navigation 当前navigation

 */

- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation 

/**

 *  当内容开始返回时调用

 *

 *  @param webView    实现该代理的webview

 *  @param navigation 当前navigation

 */

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation 

/**

 *  页面加载完成之后调用

 *

 *  @param webView    实现该代理的webview

 *  @param navigation 当前navigation

 */

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

/**

 *  加载失败时调用

 *

 *  @param webView    实现该代理的webview

 *  @param navigation 当前navigation

 *  @param error      错误

 */

- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error


/**

 *  接收到服务器跳转请求之后调用

 *

 *  @param webView      实现该代理的webview

 *  @param navigation   当前navigation

 */

- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation 

/**

 *  在收到响应后,决定是否跳转

 *

 *  @param webView            实现该代理的webview

 *  @param navigationResponse 当前navigation

 *  @param decisionHandler    是否跳转block

 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler 

/**

 *  在发送请求之前,决定是否跳转

 *

 *  @param webView          实现该代理的webview

 *  @param navigationAction 当前navigation

 *  @param decisionHandler  是否调转block

 */

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 


#pragma mark - WKUIDelegate

/**

 *  处理js里的alert

 *

 */

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler 

/**

 *  处理js里的confirm

 */

- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值