精华内容
下载资源
问答
  • 2021-12-30 15:46:04

    更多方法交流可以家魏鑫:lixiaowu1129,一起探讨iOS相关技术!

    需求分析:

    最近项目需求需要麦克风录音权限,因为整体上的UI界面是前端wkwebview搭建的,实现功能逻辑是由iOS实现,没有用原生!然后就出现了需要麦克风录音机跟H5交互的功能模块!

    查了资料都文章说iOS对h5交互麦克风录音不友好
    现在具体工作流程步骤如下:

    1. 首先创建了一个wkwebview
    //加载webview视图
        override func loadView() {
            let preference = WKPreferences()
            preference.minimumFontSize = 0
            preference.javaScriptEnabled = true
            preference.javaScriptCanOpenWindowsAutomatically = true
            preference.setValue("TRUE", forKey: "allowFileAccessFromFileURLs")
            debugPrint("这里已经进来了")
            
            // swift 提供给 h5 调用方法
            let userContentController = WKUserContentController()
            userContentController.add(self, name: "callAudio")  //调起iOS音频权限
    更多相关内容
  • 前言 现在多数项目中会有使用webView的情况,过去往往使用UIWebView解决问题,但是由于其各种不便,给...WKWebView是继承自UIView的,因此构建方式还是很老套的,通常 - (instancetype)initWithFrame:(CGRect)fra...

    前言

    现在多数项目中会有使用webView的情况,过去往往使用UIWebView解决问题,但是由于其各种不便,给开发者带来了很多麻烦。现在项目中有所使用,所以写一篇总结,方便以后用到了查找和使用也为了方便其他同行。

    正文

    基础使用

    构建和配置

    WKWebView是继承自UIView的,因此构建方式还是很老套的,通常

    - (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
    

    这个方法就够用了,第一个参数不多说,按照通常的使用就可以,第二个参数是对webView的配置对象,里面有很多属性可以使用,但是这里我只进行最简单使用的说明。

    WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
    configuration.preferences.minimumFontSize = 10;//设置最小字体
    configuration.preferences.javaScriptEnabled = YES;//是否可以使用JavaScript
    configuration.preferences.javaScriptCanOpenWindowsAutomatically = NO;//JS是否可以自动打开页面
    

    以上配置就足够正常使用,其他的如果项目还有需要,请自己根据需要添加。
    然后是对WKWebView的基本设置,

    self.webView.scrollView.bounces = NO;
    self.webView.navigationDelegate = self;
    

    设置了取消弹性和代理,需要说明的是由于我们使用的是需要和JS进行交互的webView,所以需要在ViewController中声明两个代理WKNavigationDelegate,WKScriptMessageHandler,前者是用来处理webView加载视图的各种情况的,后者是主要用来处理交互事件的。
    最后通过addSubView添加视图到父视图上面就可以了,这个时候应该是没有加载任何页面的webView。而主要功能加载web网页,需要使用以下方法:

    @property (nonatomic, strong) NSURLRequest *resetUrlRequest;
    
    self.resetUrlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"你所需要加载的网址"]];
    

    当然考虑项目中可能会对网址进行拼接,如拼接token,因此强烈建议,将后面的URL构建部分挪到顶上分出来写。

    基本代理相关

    常用的有:

    //开始加载
    -(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation
    //加载完成
    -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
    //页面跳转失败
    - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error
    //加载报错,通常来说如果页面出现不存在等问题,会走这里,如果需要对空白页面进行处理,在这里处理
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error
    //请求之前,决定是否要跳转:用户点击网页上的链接,需要打开新页面时,将先调用这个方法。
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
        
        //允许页面跳转
    //    NSLog(@"%@=========tw============",navigationAction.request.URL);
        //如果是跳转一个新页面
        if (navigationAction.targetFrame == nil) {
            [webView loadRequest:navigationAction.request];
        }
        
        decisionHandler(WKNavigationActionPolicyAllow);
    }
    //接收到相应数据后,决定是否跳转
    - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{
        
        if (((NSHTTPURLResponse *)navigationResponse.response).statusCode == 200) {
            decisionHandler (WKNavigationResponsePolicyAllow);
        }else {
            decisionHandler(WKNavigationResponsePolicyCancel);
        }
    }
    

    还有这些可能需要的

    // 主机地址被重定向时调用
    - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecified WKNavigation *)navigation;
    // 当内容开始返回时调用
    - (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation;
    // 如果需要证书验证,与使用AFN进行HTTPS证书验证是一样的
    - (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *__nullable credential))completionHandler;
    //9.0才能使用,web内容处理中断时会触发
    - (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0);
    

    到此,基础的使用结束。

    限制用户选择以及长按操作

    有时候,我们会遇到一个比较头疼的问题,我们不想让用户长按选择或者有弹窗,那么这时我们需要添加两行代码来禁止这一系列行为。

    //WKWebview 禁止长按(超链接、图片、文本...)弹出效果
    [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil];
    [self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';" completionHandler:nil];
    

    值得注意的是,这里其实是通过调用webView直接使用JS代码实现的操作,如果有需要还可以实现别的功能,而且这个方法最后有一个执行完毕之后的block,可以实现很多操作。

    添加进度条

    构建

    @property (nonatomic, strong)UIProgressView *progressView;
    
    //添加进度条
    self.progressView = [[UIProgressView alloc]initWithFrame:CGRectMake(0, 2, self.view.frame.size.width, self.view.frame.size.height)];
    self.progressView.tintColor = UIColorWithRGB(254, 79, 109);
    [self.webView addSubview:self.progressView];
    [self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:nil];
    

    监听

    #pragma mark - 进度条
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
        
        if ([keyPath isEqual:@"estimatedProgress"] && object == self.webView) {
            [self.progressView setAlpha:1.0f];
            [self.progressView setProgress:self.webView.estimatedProgress animated:YES];
            if (self.webView.estimatedProgress  >= 1.0f) {
                [UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionCurveEaseOut animations:^{
                    [self.progressView setAlpha:0.0f];
                } completion:^(BOOL finished) {
                    [self.progressView setProgress:0.0f animated:YES];
                    self.progressView.hidden = YES;
                }];
            }
        }else{
            [super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
        }
    }
    

    代理中操作

    -(void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
        
        self.progressView.hidden = NO;
        self.progressView.transform = CGAffineTransformMakeScale(1.0, 1.5);
        [self.view bringSubviewToFront:self.progressView]; // 将progress放到最前面
    }
    
    -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{
        self.progressView.hidden = YES;
        self.title = self.webView.title;
        
        //WKWebview 禁止长按(超链接、图片、文本...)弹出效果
        [self.webView evaluateJavaScript:@"document.documentElement.style.webkitTouchCallout='none';" completionHandler:nil]; 
        //    [self.webView evaluateJavaScript:@"document.documentElement.style.webkitUserSelect='none';" completionHandler:nil];
        
    }
    - (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error{
        NSLog(@"%@---------------",error);
        self.progressView.hidden = YES;
        
    }
    - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{
        NSLog(@"%@-------------------",error);
        //加载本地的一个空页面的操作
        //[self sk_loadErrorPage];
    }
    

    返回上级以及popViewController

    	if ([[self.webView.backForwardList currentItem].title isEqualToString:@"首页"]) {
            [self.navigationController popViewControllerAnimated:YES];
        }
        if ([self.webView canGoBack]) {
            //控制订单列表中的较多界面折回
            if ([[self.webView.backForwardList currentItem].title isEqualToString:@"订单列表"] &&
                [[self.webView.backForwardList backItem].title isEqualToString:@"订单列表"]) {
                [self.webView goToBackForwardListItem:[self.webView.backForwardList backList].firstObject];
            }else{
                [self.webView goBack];
            }
            
        }else{
            [self.navigationController popViewControllerAnimated:YES];
        }
    

    可以对H5页面的标题进行判断来决定是否跳转。

    重点:JS交互

    WKWebView的交互方法和之前的UIWebView其实本质上没有什么太大的差别,都是通过发送方法名找到对应的方法执行对应的操作。我的具体操作如下:

    -(void)viewWillAppear:(BOOL)animated{
        //    self.navigationController.navigationBar.hidden = NO;
        if (self.webView) {
            if (self.webView.configuration.userContentController.userScripts.count>0) {
                //移除所有的监听
                [self removeAllScriptMsgHandle];
            }
            //对JS调用的方法进行监听,最好集中处理
            [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"mjxLogin"];
        }
    }
    -(void)viewWillDisappear:(BOOL)animated{
        [self removeAllScriptMsgHandle];
    }
    - (void)dealloc{
    	//移除监听和代理
        [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
        [self.webView setNavigationDelegate:nil];
        [self.webView setUIDelegate:nil];
    }
    -(void)removeAllScriptMsgHandle{
        
        //移除监听,不移除一定会报错
        [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"mjxLogin"];
       
    }
    
    

    对监听的处理的代理

    //用来接收js调用本地方法的拦截器
    -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
    //    NSLog(@"%@------mes------",message.body);
        //分享,多参数的情况
        if ([message.name isEqualToString:@"mjxShare"]) {
            NSDictionary *messageDic = message.body;
            [self shareGoodsWithTitle:messageDic[@"title"] withContent:messageDic[@"content"] withUrl:messageDic[@"url"] withImage:messageDic[@"img"]];
        }
        //申请试用,带一个参数的情况
        if ([message.name isEqualToString:@"mjxApply"]) {
            NSDictionary *messageDic = message.body;
            [self requestApplyGoods:messageDic[@"trade_sn"]];
            
        }
        //弹出错误信息
        if ([message.name isEqualToString:@"errorAlert"]) {
            [SKHUD showErrorWithStatus:message.body];
        }
      
        //保存二维码
        if ([message.name isEqualToString:@"codeImg"]) {
            [SVProgressHUD show];
            NSDictionary *messageDic = message.body;
            
            NSURL *url = [NSURL URLWithString:messageDic[@"codeImgUrl"]];
            
            NSData *data = [NSData dataWithContentsOfURL:url];
            UIImage *img;
            img = [UIImage imageWithData:data];
            
            
            UIImageWriteToSavedPhotosAlbum( img, self,@selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:) , NULL);
        }
        
    }
    

    到此,相关使用全部结束,希望喜欢活有用的话,能够点赞或者评论支持,谢谢。

    展开全文
  • ios-JS wkWebView交互.zip

    2019-07-11 19:09:46
    js调用swift的方法打开相机相册,压缩图片然后通过参数传给js方法 网页显示压缩后的图片
  • iOS JavaScriptCore 和 WKWebView交互

    千次阅读 2017-03-23 10:56:07
    基于wkwebview的和JS 交互 遵守两个协议 < WKNavigationDelegate,WKScriptMessageHandler > WKWebViewConfiguration * configuration = [[ WKWebViewConfiguration alloc]init]; ...

    基于wkwebview的和JS 交互
    遵守两个协议

    <WKNavigationDelegate,WKScriptMessageHandler>
    
    WKWebViewConfiguration * configuration = [[WKWebViewConfiguration alloc]init];
        userContentController =[[WKUserContentController alloc]init];
        configuration.userContentController = userContentController;
        self=[super initWithFrame:CGRectZero configuration:configuration];
        //注册
         [userContentController addScriptMessageHandler:self name:@"cleanCatch"];
          [userContentController addScriptMessageHandler:self name:@"testOcFun"];

    由于和Js交互会导致内存泄漏,所以dealloc remove掉

    -(void)dealloc{
        //这里需要注意,前面增加过的方法一定要remove掉。
    
        [userContentController removeScriptMessageHandlerForName:@"cleanCatch"];
    
          [userContentController removeScriptMessageHandlerForName:@"testOcFun"];
    
    }

    JS 调用OC

    //代理函数
    -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
    //window.webkit.messageHandlers.<message.name>.postMessage(<message.body>);
    
        NSLog(@"JS 调用OC");
        NSLog(@"%@,%@",message.name,message.body);
         if([message.name isEqualToString:@"cleanCatch"]){
            //清缓存
            [self cleanCatcheAction];
        }else if([message.name isEqualToString:@"testOcFun"]){
            //测试
            [self test];
        }
    }

    OC 调用JS 函数

    -(void)test{
    //调用方式: JS函数名(字符串参数)
         [self ocUseJsFunctionParms:@"OcCallJsfun2(\"{"ret":"success"}\")"];
    }
    //OC调用Js
    -(void)ocUseJsFunctionParms:(NSString*)parms{
        //@"方法名(\"参数\")" demo: NSString *jsStr = [NSString stringWithFormat:@"shareResult('%@','%@','%@')",title,content,url];
        NSLog(@"OC 调用 JS");
        //NSString*jsstr = [NSString stringWithFormat:@"cleanCatchFinish(\"%@\")",parms];
        dispatch_async(dispatch_get_main_queue(), ^{
            //OC 调用 JS
            [self evaluateJavaScript:parms completionHandler:^(id _Nullable result, NSError * _Nullable error) {
                if (error) {
                    NSLog(@"出错:%@",error);
                }else{
                    NSLog(@"OC 调用JS 成功");
                }
            }];
        });
    
    }

    HTML网页,我是加载本地的

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <script type="text/javascript" src="jquery-3.2.0.min.js"></script>
    <script type="text/javascript">
        function JsCallOC1() {
        window.webkit.messageHandlers.cleanCatch.postMessage(null);  
        }
    
    function JsCallOC2() {
        window.webkit.messageHandlers.testOcFun.postMessage(null);
    }
    function OcCallJsfun2(parmss) {
       document.write("<p>"+JSON.stringify(parmss)+"</p>");
    }
    function OcCallJsfun1() {
        alert('调用无参数的JS方法');
    }
    </script>
    <style type="text/css">
        #a{
            color:red;
        }
    </style>
    <body bgcolor="aqua">
        <button type="button" onclick="JsCallOC1()">调用无惨函数</button>
        <button type="button" onclick="JsCallOC2()">调用有参数函数</button>
        <a type="button" onclick="JsCallOC3()"id="tel">10086</a>
    </body>
    </html>
    
    展开全文
  • vue WKWebView 交互

    2020-07-09 21:06:40
    重新整理一下网页与原生的交互 iOS Objective-c 懒加载个webview @interface ViewController ()<WKScriptMessageHandler> @property(nonatomic,strong) WKWebView *webView; @end -(WKWebView *)webView{ ...

    写在开始

    目前AppStore提交已经彻底废弃UIWebView 以前一键接入的webjavascriptbridge也该放弃了
    重新整理一下网页与原生的交互

    iOS Objective-c

    懒加载个webview

    @interface ViewController ()<WKScriptMessageHandler>
    
    @property(nonatomic,strong) WKWebView *webView;
    
    @end
    
    -(WKWebView *)webView{
        if (!_webView) {
            // 创建一个配置类
            WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc]init];
            WKUserContentController *userContentController = [[WKUserContentController alloc]init];
            // 监听js调用 具体调用方式在js端
            // 需要实现WKScriptMessageHandler 中方法  在下文↓
            [userContentController addScriptMessageHandler:self name:@"jsCallNative"];
            configuration.userContentController = userContentController;
            _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:configuration];
            _webView.navigationDelegate = self;
            _webView.scrollView.bounces = NO;
            [_webView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1]];
        }
        return _webView;
    }
    
    

    实现WKScriptMessageHandler userContentController 监听js调用

    - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
        // 登陆保存token
        if ([message.name isEqualToString:@"jsCallNative"]) {
            // data is message.body
        }
    }
    

    调用js中的方法

    [self.webView evaluateJavaScript:[NSString stringWithFormat: @"nativeCallJS(%@)" ,[params JSONString] ]completionHandler:^(id _Nullable result, NSError * _Nullable error) {
                    NSLog(@"调用js返回%@",result);
                }];
    
    

    js

    前端用的vue 大同小异

    监听原生的调用

    export default{
        ...
        created(){
            window.nativeCallJS = this.nativeCallJS
        },
        methods:{
            nativeCallJS:function(data){
                return "return data" + data
            }
        }
        ...
    }
    

    调用原生的方法

    window.webkit.messageHandlers.jsCallNative.postMessage(params)
    

    代码中无聊的地方太多 只是找些关键的贴出来 可能有错字 你说气不气

    展开全文
  • 主要给大家介绍了关于iOS开发教程之WKWebView与JS的交互的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新控件 WKWebView. 相比与 UIWebView, WKWebView 存在很多优势...
  • 虽然中途也一直寻思着升级到WKWebView,但奈何项目中业务众多又是分布式的,和js交互的地方也很多,而WKWebView和UIWebView的交互方法写法又不一样,前端得区分是Android还是iOS,所有有交互的地
  • H5 js与iOS WKWebView交互

    2021-06-18 10:18:28
    WKWebView的优势1 更多的支持HTML5的特性2 官方宣称的高达60fps的滚动刷新率以及内置手势3 将UIWebViewDelegate与UIWebView拆分成了14类与3个协议,以前很多不方便实现 的功能得以实现4 Safari相同的JavaScript引擎5 ...
  • 主要介绍了JS交互点击WKWebView中的图片实现预览效果,需要的朋友可以参考下
  • iOS WKWebview与JS交互

    千次阅读 2021-12-08 11:04:51
    在APP开发中,调用H5极验功能涉及到原生与JS 交互,我用的是系统原生的方式实现,下面记录下实现步骤。 (仅涉及iOS端工作流程记录) 【OC版本:】 @interface ViewController ()<WKUIDelegate,WKNavigationDelegate...
  • mPaaS使用的就是系统提供的最原始的交互方式,包括 WKWebView调用原生 和 原生调用WKWebView WKWebView调用原生 调用原生就找这个方法- (void)userContentController:(WKUserContentController *)...
  • swift4 - wkwebview交互

    千次阅读 2017-12-22 10:43:38
    WKWebView用法介绍本文swift与WKWebView交互Demo地址前言:苹果在iOS8中推出了webkit新框架,提供了WKWebview组件用来替换存在各种问题的UIWebview,用WKWebview加载网页,相较于UIWebview速度更快了,内存占用更少了...
  • WKWebView与H5交互的两种方式

    千次阅读 2018-09-21 11:10:06
    交互方式一:原生交互(以WKWebView为栗子) 1.原生调用H5方法 [wkWebView evaluateJavaScript:@"js方法名" completionHandler:^(id _Nullable response, NSError * _Nullable error) { if (!error) { //...
  • 以下简单列出WKWebView的使用及注意事项. 初始化webview及事件监听 fileprivate lazy var webView: WKWebView = { let webConfiguration = WKWebViewConfiguration() webConfiguration.preferences = WKP...
  • 一分钟学会swift里WKWebView与javaScript的简单交互
  • WKWebView与H5交互

    2019-07-22 10:17:56
    由于项目中使用的一直都是UIWebView遇到了性能问题,...无奈只能使用WKWebView。 需要使用到的是WKScriptMessageHandler: WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; [co...
  • iOS WKwebView和js交互

    千次阅读 2019-04-10 10:46:47
    交互中,关于alert (单对话框)函数、confirm(yes/no对话框)函数、prompt(输入型对话框)函数时,实现代理协议 WKUIDelegate ,则系统方法里有三个对应的协议方法.大家可以进入WKUIDelegate 协议类里面查看.下面具体...
  • ios与H5通过WKWebView交互详解

    千次阅读 2018-05-25 18:15:34
    WK的基本用法先不说了,主要在这里记录一下使用WKWebView在于H5交互时走过的一些坑,以及如果web端的同学如果没有做过和ios端的交互,那么自己也可以去帮助web端去完成;另外在调试过程中,也不用一味的去等待和H5去联调,...
  • js与oc原生WKWebView交互传值

    万次阅读 2018-08-15 17:29:31
    最近在做移动端实现H5支付,需要与JS交互,实现状态提醒,...先看下四中交互方式:(我用的第三种,现在都是在用wkwebview不建议用webview) 1.拦截网址(适用于UIWebView和WKWebView) 2.JavaScriptCore(只适用...
  • WKWebView与js交互之完美解决方案

    万次阅读 热门讨论 2017-04-04 19:09:43
      随着H5功能愈发的强大,没进行过混合开发的小伙们都不好意思说自己能够独立进行iOS的app开发,在iOS7操作系统下,常用的native,js交互框架有easy-js,WebViewJavascriptBridge,以及结合javaScriptCore的框架。...
  • h5 js调用ios方法,请参考之前的文档 //JS调用OC 添加处理脚本 //ScriptMessageHandler [userContentController addScriptMessageHandler:self name:@"CallScanCodeHandler"]; #pragma mark - ...
  • js 与WKWebView 交互

    2019-03-25 07:39:24
    实现delegate WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler ...注入要和js交互的方法 WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; WKUserContentControll...
  • WKWebview和iOS交互

    2019-10-31 11:18:08
    WKWebview和iOS交互篇 ##iOS调用js 在UIWebview的时候使用JSContext来进行js通信,在WKWebview的时候,没有JSContext了,但是Apple提供了新的方法evaluateScript,使用起来更便捷。 [self.webview ...
  • WKWebView是iOS8 出来的浏览器控件,用来取代UIWebView.对于WKWebView与UIWebView的对比特点,这里就不过多的叙述,都算是老生常谈的问题了,网上的说明也很多.近来在做Web端,需要植入移动端,并且做JS交互工作.以前写过...
  • iOS使用WKWebView与JS的交互

    千次阅读 2020-05-20 14:01:32
    WKWebView是iOS8 出来的浏览器控件,用来取代UIWebView 现在2020年 苹果已经不建议使用UIWebView了,所以需要把原来用到的换成WKWebView 本篇文章主要作用是实现JS调用OC,并且OC可以给到回调 WKJSBridge gitHub地址 ...
  • iOS 边学边记 WKWebView与js交互详解

    千次阅读 2020-11-20 08:49:48
    iOS下OC与JS的交互(WKWebview-MessageHandler实现) 在开发过程中,iOS 中实现加载 web 页面主要有两种控件,UIWebView 和 WKWebview,两种控件对应具体的实现方法不同。 现在苹果公司已经不允许使用webview的app上架...
  • 随着前端开发的强大,原生与h5的交互用的也越来越多。 为什么选用WKWebView,我们可以做一个对比,同一个web页面,用UIWebView加载和用WKWebView来加载,内存占用情况...UIWebView与h5的交互方式和WKWebView与h5的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,950
精华内容 1,180
关键字:

wkwebview交互