美文网首页
WKWebView使用

WKWebView使用

作者: Kean_Qi | 来源:发表于2017-01-16 11:13 被阅读16次
    @interface BaiduViewController () <WKNavigationDelegate, WKUIDelegate>
    
    @property (strong, nonatomic) WKWebView *webView;
    
    @end
    
    
    @implementation BaiduViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
      // 图片缩放的js代码
        NSString *js = @"var count = document.images.length;for (var i = 0; i < count; i++) {var image = document.images[i];image.style.width=320;};window.alert('加载' + count + '的图');";
        
        // 根据JS字符串初始化WKUserScript对象
        WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
        
        // 根据生成的WKUserScript对象,初始化WKWebViewConfiguration
        WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
        [config.userContentController addUserScript:script];
        
        _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config];
        //_webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
        _webView.UIDelegate = self;
        _webView.navigationDelegate = self;
        [self.view addSubview:_webView];
        
        [_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];
    }
    
    
    #pragma mark - WKNavigationDelegate
    
    /**
     *  在发送请求之前,决定是否跳转 01
     *
     *  @param webView          实现该代理的webview
     *  @param navigationAction 当前navigation
     *  @param decisionHandler  是否调转block
     */
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        
    
        // 是否允许跳转
        decisionHandler(WKNavigationActionPolicyAllow);
    }
    
    /**
     *  页面开始加载时调用 02
     *
     *  @param webView    实现该代理的webview
     *  @param navigation 当前navigation
     */
    - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
    
    }
    
    /**
     *  在收到响应后,决定是否跳转 03
     *
     *  @param webView            实现该代理的webview
     *  @param navigationResponse 当前navigation
     *  @param decisionHandler    是否跳转block
     */
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
        
        NSString *lowercaseString = navigationResponse.response.URL.host.lowercaseString ;
         // 是否允许跳转
        decisionHandler(WKNavigationResponsePolicyAllow);
    }
    
    
    /**
     *  当内容开始返回时调用 04
     *
     *  @param webView    实现该代理的webview
     *  @param navigation 当前navigation
     */
    - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
    }
    
    /**
     *  页面加载完成之后调用 05
     *
     *  @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 {
    
    }
    
    #pragma mark - WKUIDelegate
    
    /**
     *  web界面中有弹出警告框时调用
     *
     *  @param webView           实现该代理的webview
     *  @param message           警告框中的内容
     *  @param frame             主窗口
     *  @param completionHandler 警告框消失调用
     */
    - (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler {
        
        [[[UIAlertView alloc] initWithTitle:@"温馨提示" message:message delegate:nil cancelButtonTitle:@"确认" otherButtonTitles: nil] show];
        
        completionHandler();
    }
    
    //运行JavaScript确认面板与消息
    - (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler {
        
        NSLog(@"message%@",message);
    }
    
    //运行JavaScript确认面板与消息
    - (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler {
        NSLog(@"defaultText%@",defaultText);
        
    }
    
    // 从web界面中接收到一个脚本时调用
    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
        
        NSLog(@"%@", message);
    }
    
    
    
    @end
    

    相关文章

      网友评论

          本文标题:WKWebView使用

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