zoukankan      html  css  js  c++  java
  • 使用OC开发phonegp 组件

    使用OC开发phonegp 组件

    1. 使用oc 对phonegp中的组件近些开发,首先具体的pgonegp跟nativecode之间的一些优劣就不说了,开发phonegp 

    对应的组件主要就是使用nativecode开发一些具有某些功能的组件,然后这些类交付给js使用就可以了,说简单些就是使用OC开发一些类然后交付使用,这中间涉及一个最主要的问题就是,js如何实现与nativecode代码之间的通信问题,解决了这个麻烦一切问题迎刃而解,首先Cordova为我们提供了一个最核心的组件,依靠这个phonegp中精华的部分可以为我们提供很多方便。

    2. 废话少说,直接切入正题,我们先解决一个问题,使用OC 开发一个组件,然后交付js

    调用,一个最直接的例子

         (1). 首先我们创建一个OC 的类HelloPlugin  继承与 CDVPlugin1

    • (void)nativeFunction:(NSMutableArray*)arguments;  函数定义 

     

    - (void)nativeFunction:(NSMutableArray*)arguments{

        NSLog(@"hello nativecode...");

    }

    这里面我们只需要定一个一个类就可以了,他只会打印一句nativecode的一句字符串

    2.接下来我们实现我们的js代码模块,js   和nativecode都写好之后然后让他们相互调用

    js代码:

    首先创建一个js文件,HelloPlugin.js

    定义一个js类,然后在接下来的时间里我们会使用这个类

     

    var HelloPlugin = {

        callNativeFunction: function (success, fail, resultType)

        {

            return Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

        }

    };

    这个类有一个函数,三个参数,我们回调用这个对象里面的函数接下来

    1. 接下来是正题,在index.html里面,这一块是前段的代码,引入js文件,这个不多说了

    <script type="text/javascript"charset="utf-8"src="HelloPlugin.js"></script>

    但是此处会有一个问题,刚第一次接触这个地方的时间发现js文件引用了可就是不成功,后来发现了问题(在Cordova工程的www目录下,这个目录的结构跟iOS自身工程目录结构不同,这个地方的目录 以及文件引用跟java C#中类似,你创建了文件只用放在硬盘上www目录下就行,在xcode里面直接在子目录下创建会有些问题,前提是HelloPlugin.js index.html一定都在www目录下同一文件夹目录下)这个问题搞定,接下来继续入题:

    首先定一个一个块

     <div id="deviceready"class="blink">

             <p class="event listening">Connecting to Device43434343</p>

             <p class="event received">Device is Ready</p>

     </div>

    接下来注册一个事件

     <script type="text/javascript">

             document.addEventListener("deviceready", onDeviceReady, false);

              

              document.addEventListener("btn", clickBtn, false);

              function onDeviceReady() {

                  /**

                   * 加载成功调用js

                   */

                  //MyPlugin.add("My","Plugin",addSuc,addFiald);

                  MyPlugin.nativeFunction(

                                          ["HelloWorld"],

                                          function(result) {

                                          alert("Success: "+result);

                                          },

                                          function(error) {

                                          alert("Error: "+error);

                                          }

                                          );

              }

        </script>

    这样js 通过网页事件调到对应的方法,这个事件解释下:

    首先网页事件触发这个不说了,我们在网页里面通过js 触发事件调用到HelloPlugin.js

    总的 MyPlugin.nativeFunction函数,参数一致都有,这个没问题,

    接下来看这个函数里面到底写了什么

    Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

    前两个参数分别是失败 成功走的函数,

    这个类似与block, 接下俩一个是注册插件名字,以及插件里面的函数名, 最后一个是参数,

    解释下,我们写的插件是用OC写的,叫HelloPlugin, 

    我们在应用程序 config.xml里面配置了,  第一个name只是我们给插件定义的可以在js里面用的名字,第二个 ios-package: HelloPlugin,这个是对应的,我们把写好的OC类配置了一个插件名,可以理解为一个映射,在 js 中我们就用这个叫 helloPlugin的来对应我们用OC写的插件。

     <feature name="helloPlugin">

            <param name="ios-package"value="HelloPlugin" />

        </feature>

    接下来: Cordova.exec( success, fail, "helloPlugin", "nativeFunction", []);

    这个就是Cordova给我门提供的函数,字面意思执行函数,参数植入,有类名,函数名,具体什么类调用什么函数,OK,这样基本已经连接好了,直接Run,OK。。。

     

    整体来讲,Cordova插件开发主要就是一个解决nativecode和js之间通信问题的,主要是两种语言之间互调,通信数据传输,H5可以更好的优化对应的界面,适应更多的平台,nativecode则更多的做一些局限于平台自身的一些问题的处理,这一点也是不可能逾越的。

  • 相关阅读:
    Spring Boot Docker
    基于 Spring Security 的前后端分离的权限控制系统
    Java图片加水印
    Linux安装Nexus
    Spring Security 入门篇
    树形结构的菜单表设计与查询
    延迟队列的常用的实现方式
    Spring Boot 自动配置 源码分析
    Spring Boot 启动过程
    服务端如何防止重复支付
  • 原文地址:https://www.cnblogs.com/ccguo/p/3671438.html
Copyright © 2011-2022 走看看