您的位置:首页 > 移动开发

WKWebView 使用的一些踩坑记录

2017-03-03 15:51 393 查看
// 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 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  WKWebView