zoukankan      html  css  js  c++  java
  • JS调用OC方法

    JS调Native

    http://www.cnblogs.com/dailc/p/5931322.html

    引入官方的库文件

    #import <JavaScriptCore/JavaScriptCore.h>

    Native注册api函数(OC)

    //webview加载完毕后设置一些js接口
    -(void)webViewDidFinishLoad:(UIWebView *)webView{
        [self hideProgress];
        [self setJSInterface];
    }
    
    -(void)setJSInterface{
        
        JSContext *context =[_wv valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        
        // 注册名为foo的api方法
        context[@"foo"] = ^() {
        	
        	//获取参数
            NSArray *args = [JSContext currentArguments];
            NSString *title = [NSString stringWithFormat:@"%@",[args objectAtIndex:0]];
            //做一些自己的逻辑
            //返回一个值  'foo:'+title
            return [NSString stringWithFormat:@"foo:%@", title];
        };
        
    
        
    }				
    			

    Html中JS调用原生的代码

    //调用方法,用top是确保调用到最顶级,因为iframe要用top才能拿到顶级
    window.top.foo('test'); //返回:'foo:test'
    			

    如上所示,Native中通过引入官方提供的JavaScriptCore库(iOS7中出现的),然后可以将api绑定到JSContext上(然后Html中JS默认通过window.top.***可调用)。有如下特点

    • iOS7才出现这种方式,在这之前,js无法直接调用Native,只能通过JSBridge方式简介调用
    • JS能调用到已经暴露的api,并且能得到相应返回值
    • iOS原生本身是无法被JS调用的,但是通过引入官方提供的第三方"JavaScriptCore",即可开放api给JS调用

     

    https://blog.csdn.net/u011619283/article/details/52700601

     

    - (void)myMethod:(CDVInvokedUrlCommand*)command

    {

        NSString* echo = [command.arguments objectAtIndex:0];

         NSLog(@"%@",echo);

     

         POSJiaoyiViewController *sele=[[POSJiaoyiViewController alloc] init];

         [self.viewController.navigationController pushViewController:sele animated:YES];

         

         userDefaults=[NSUserDefaults standardUserDefaults];

     

        if (echo != nil && [echo length] > 0) {

            [self.commandDelegate runInBackground:^{

                CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];

                [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];

            }];

        } else {

            [self.commandDelegate runInBackground:^{

                CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];

                [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];

            }];

        }

    }

  • 相关阅读:
    Yaf 在 Nginx 中的配置
    关于 GPG 用这个 就够 了
    PHP 服务器端处理跨域问题
    Linux 终端代理方式
    【转载】Oracle数据字典详解
    【转载】Oracle之内存结构(SGA、PGA)
    【转载】 使用rman进行坏块修复(ORA-01578、ORA-01110)
    【转载】使用Exp和Expdp导出数据的性能对比与优化
    【转载】oracle dbms_metadata.get_ddl的使用方法总结
    ORACLE执行详解
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/4730639.html
Copyright © 2011-2022 走看看