美文网首页
关于UIWebView、WKWebView 协议问题

关于UIWebView、WKWebView 协议问题

作者: Aurora166 | 来源:发表于2016-11-08 09:41 被阅读0次

    因为公司产品需求,需要支持UIWebView/WKWebView与web进行协议回调。

    web端触发方法 屏幕快照 2018-04-12 下午11.12.45.png

    UIWebView 协议

    需要导入头文件
    #import <JavaScriptCore/JavaScriptCore.h>
    遵守协议WKScriptMessageHandler
    
    声明协议
    //首先创建一个实现了JSExport协议的协议
    @protocol LivePullJSObjextProtocol <JSExport>
    - (void)openLive:(int)isOpenInfo;
    @end
    
    - (void)webViewDidFinishLoad:(YXTCoreWebView *)webView
    {
        if ([self.webView.realWebView isKindOfClass:[UIWebView class]]) {//UI
            //1,得到JSContext 固定语句 获取该UIWebview的javascript执行环境。
            JSContext *context = [webView.realWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
            //需要先注入方法,再注册协议
            context[@"appSDK"] = self;//appSDK是web触发的方法调用的方法
        }
    }
    
    实现协议
    - (void)openLive:(int)isOpenInfo {
    }
    

    WKWebView 协议

    - (void)userContentController:(WKUserContentController *)userContentController
          didReceiveScriptMessage:(WKScriptMessage *)message {
        if ([message.name isEqualToString:@"openLive"]) {
            ///协议
            [self openLive:[message.body intValue] ];
        }
    }
    

    在使用WKWebView进行页面加载时,直接链接可以加载,但是点击web界面的按钮却未走协议,刚开始以为是前端不支持WKWebView,后来发现是我们自己有的代理没实现
    要进入新界面WKWebView需要实现一个代理:
    //1.创建一个新的WebVeiw

    - (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures{
        if (!navigationAction.targetFrame.isMainFrame) {
            [webView loadRequest:navigationAction.request];
            
            NSLog(@"url:%@",navigationAction.request.URL.absoluteString);
            
        }
        return nil;
    }
    

    相关文章

      网友评论

          本文标题:关于UIWebView、WKWebView 协议问题

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