zoukankan      html  css  js  c++  java
  • JS与OC交互,JS中调用OC方法(获取JSContext的方式)

    最近用到JS和OC原生方法调用的问题,查了许多资料都语焉不详,自己记录一下吧,如果有误欢迎联系我指出。

    JS中调用OC方法有三种方式:

    1.通过获取JSContext的方式直接调用OC方法
    2.通过继承自JSExport的方式调用delegate中的方法
    3.截取URL的方式(此种方式资料很多,就不写了)

    先上OC代码

    - (void)webViewDidFinishLoad:(UIWebView *)webView {
      
      

        // 设置javaScriptContext上下文

        self.jsContext = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    // 方法一
        __weak typeof(self) weakSelf = self;
        self.jsContext[@"getMessage"] = ^(){
            return [weakSelf blockCallMessage];
        };
    
        // 方法二
        self.jsContext[@"JavaScriptInterface"] = self;
    }
    
    - (NSString *)blockCallMessage {
    return @"call via block"; } #pragma mark - JSCallDelegate // 提供给JS调用的方法 - (NSString *)tipMessage {
    return @"call via delegate"; }

    HTML代码

    <html>
    <head>
    </head>
    <body>
        <script>
            function buttonClick1()
            {
                // 方法一
                 var token = getMessage();
    
                alert(token)
            }
            function buttonClick2()
            {
                // 方法二
                var token = JavaScriptInterface.tipMessage();
            
                alert(token)
            }
            </script>
        <button id="abc" onclick="buttonClick1()">function 1</button>
        <button id="abcd" onclick="buttonClick2()">function 2</button>
    </body>
    </html>

    方法一中的jsContext[@"getMessage"]需要和JS中调用的方法名一致,既JS中需要直接调用getMessage(),而jsContext[@"getMessage"]则赋值为一个block,这个block中调用的方法就是JS中调用getMessage()就是执行这个block;

    方法二中的jsContext[@"JavaScriptInterface"] = self其中的JavaScriptInterface可以随便命名,保持JS中和该命名保持一致即可,JS中通过JavaScriptInterface来调用继承自JSExport的delegate中的方法,即JavaScriptInterface.tipMessage()

  • 相关阅读:
    【JavaWeb】MVC案例之新闻列表
    PayPal高级工程总监:读完这100篇论文 就能成大数据高手(附论文下载)
    自己动手搭建搜索工具
    某学院软件工程复试回忆总结
    【NLP】Tika 文本预处理:抽取各种格式文件内容
    OpenNLP:驾驭文本,分词那些事
    【类库】私房干货.Net数据层方法的封装
    Oracle手边常用70则脚本知识汇总
    Oracle手边常用命令及操作语句
    快速了解什么是自然语言处理
  • 原文地址:https://www.cnblogs.com/xuzb/p/9018661.html
Copyright © 2011-2022 走看看