美文网首页
WKWebView和iOS交互问题排查处理

WKWebView和iOS交互问题排查处理

作者: 数字d | 来源:发表于2020-11-17 15:17 被阅读0次

1.页面悬浮按钮不显示问题,图大概和这个简书作者的一样。https://www.jianshu.com/p/e376f352e282
按照上面的方法,没解决。最后我直接修改了wkwebview的frame,问题解决
viewWillAppear中

        self.wkWebView.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT - NavigationHeight - TabbarBottom);

2.h5页面调用OC方法不起作用,把网页路径放在safari浏览器上发现这行代码报错。
后来对比了一下前面能调用成功的方法,发现这个
window.webkit.messageHandlers.Location.postMessage必须传个参数iOS那边才能成功调用Location方法

  window.webkit.messageHandlers.Location.postMessage();

3.关于打包内容中含有UIWebview的内容,2020年5月以后就不能在项目中使用UIwebview了。虽然项目中引入了UIWebview,但是我没有使用,我打包ipa,upload成功了之后。从appstore官网里构建版本看不到这个已经upload的构建版本。后来把webview的相关文件删掉,然后重新打包upload之后,几分钟就能看到构建版本里面有记录。
检查项目中是否有uiwebview,我都是搜索字符串替换删掉(太傻太天真)。
实际的操作流程是:https://www.jianshu.com/p/3a645500d461

4.接入第三方H5页面跳微信和支付宝支付失败
app业务中接入有第三方的游戏,话费充值,加油等H5模块,游戏的支付充值不需要做任何处理,但是话费充值和加油需要做。(这和第三方实现H5的方式有关)
对话费充值和加油模块的统一处理方式:


#pragma mark - WKNavigationDelegate
// 在发送请求之前,决定是否跳转
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
    [webView addObserver:self forKeyPath:@"URL" options:NSKeyValueObservingOptionNew context:nil];
}

// KVO 接收到通知时的方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    if ([keyPath isEqualToString:@"URL"]) {
        // 可以在这里进行拦截并做相应的处理
        if ([self.wkWebView.URL.absoluteString hasPrefix:@"weixin://wap/pay"] || [self.wkWebView.URL.absoluteString hasPrefix:@"alipay://alipay"]) {
            NSURL *url = [NSURL URLWithString:self.wkWebView.URL.absoluteString];
            [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
        }
        
    }
}

在didStartProvisionalNavigation方法里面监听当前WKWebview的URL,在处理时候将URL进行拦截,如果字符串中包含@"alipay://alipay"或者@"weixin://wap/pay",那么直接openURL的方式打开该链接。

相关文章

网友评论

      本文标题:WKWebView和iOS交互问题排查处理

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