WKWebView

作者: 不辣先生 | 来源:发表于2019-12-12 16:02 被阅读0次

WKWebView 替换UIWbeView 加载html 字体变小了?
首先,出现这个问题的根本原因是标签中缺少meta标签,如果是后台返回的就让后台给加上;UIWebview中有scalesPageToFit,WKWebview 没有
要么就别换了UIWebview没问题,不然就自己拼接咯

NSString *headerString = @"<header><meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'></header>";
[webView loadHTMLString:[headerString stringByAppendingString:[self attrStr]] baseURL:nil];

我这个是本地的,一个安卓同事搞得详情说明页……

趁这个机会捋一下WKWebview,具体参照:
iOS WKWebView使用总结
WKWebView的js交互(附demo)
【腾讯Bugly干货分享】WKWebView 那些坑
总结:WKWebview 和H5交互,
(一)原生调H5,evaluateJavaScript:直接调用

// iOS调用js里的navButtonAction方法并传入两个参数
    [self.webView evaluateJavaScript:@"navButtonAction('Jonas',25)" completionHandler:^(id _Nullable response, NSError * _Nullable error) {
        NSLog(@"%@=====%@",response,error);
    }];

(二)H5调原生,原生注入一个对象或者说类名,js 通过
window.webkit.messageHandlers.类名.postMessage("xxxx") 调用,然后通过WKScriptMessageHandler回调给原生界面

   // 注入JS对象名称senderModel,当JS通过senderModel来调用时,我们可以在WKScriptMessageHandler代理中接收到
     WKWebViewConfiguration *config = [WKWebViewConfiguration new];
    //初始化偏好设置属性:preferences
    config.preferences = [WKPreferences new];
    //The minimum font size in points default is 0;
    config.preferences.minimumFontSize = 10;
    //是否支持JavaScript
    config.preferences.javaScriptEnabled = YES;
    //不通过用户交互,是否可以打开窗口
    config.preferences.javaScriptCanOpenWindowsAutomatically = NO;
    //通过JS与webView内容交互
    config.userContentController = [WKUserContentController new];
    // 注入JS对象名称“show”,必须跟H5约定好,这里self会造成循环引用,可以调用removeScriptMessageHandlerForName 处理也可以另外生成一个对象遵守WKScriptMessageHandler来代替self 这个参数
    [config.userContentController addScriptMessageHandler:self name:@"show"];
    self.webView = [[WKWebView alloc]initWithFrame:self.view.bounds configuration:config];

js调用iOS

//js代码
 window.webkit.messageHandlers.show.postMessage("我是js传递过来的数据");

回调

#pragma mark WKScriptMessageHandler

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    if ([message.name isEqualToString:@"show"]) {
        
        NSLog(@"%@",message.body);// 传递的数据
    }
   
}

WKWebView
基于 LocalWebServer 实现 WKWebView 离线资源加载
iOS WKWebView与JS交互、传值,H5调相机相册、进度条
WKWebView项目实践分享(三)- native和webView交互
webView和WKWebView 返回历史页面

相关文章

网友评论

      本文标题:WKWebView

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