iOS 基于WKWebview的OC与JS交互碰到的问题

本文解决了WKWebView在加载本地HTML文件及网络页面时出现的Completionhandler未被调用的问题。通过正确实现decisionHandler的回调避免了加载过程中的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 在加载本地Html文件的时候,报了如下的错误: reason: 'Completion handler passed to -[JavaScriptCallOCViewController webView:decidePolicyForNavigationAction:decisionHandler:] was not called'

错误的原因是: 在方法

 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 
复制代码

中未实现 decisionHandler(WKNavigationActionPolicyCancel) block 的回调。

代理方法中,未实现block的回调

放开上图中的注释部分就可以了。

// 必须实现decisionHandler的回调,否则就会报错
    if (navigationAction.navigationType == WKNavigationTypeLinkActivated) {
        decisionHandler(WKNavigationActionPolicyCancel);
        NSLog(@"WKNavigationActionPolicyCancel");
    } else {
        decisionHandler(WKNavigationActionPolicyAllow);
        NSLog(@"WKNavigationActionPolicyAllow");
    }
复制代码

另外一个代理方法也是,需要实现block的回调,不然也会报错。 这个方法是在加载网络页面的时候调用。

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
复制代码

错误提示如下: reason: 'Completion handler passed to -[JavaScriptCallOCViewController webView:decidePolicyForNavigationResponse:decisionHandler:] was not called'

#pragma mark 在收到响应后,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
    NSLog(@"6->在收到响应后,决定是否跳转");
    NSLog(@"navigationResponse = %@", navigationResponse);
    NSLog(@"navigationResponse.response = %@", navigationResponse.response);
    // 必须实现decisionHandler的回调,否则就会报错
    decisionHandler(WKNavigationResponsePolicyAllow);
    NSLog(@"WKNavigationResponsePolicyAllow");
}
复制代码

转载于:https://juejin.im/post/5a32389a5188254dd9366c0e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值