使用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: \r\n"+result);

},

function(error) {

alert("Error: \r\n"+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则更多的做一些局限于平台自身的一些问题的处理,这一点也是不可能逾越的。

使用OC开发phonegp 组件的更多相关文章

  1. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  2. 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError

    报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...

  3. web前端开发常用组件

    web前端开发常用组件 1. 对话框(dialog):jbox(适合对话框等其它功能).colorbox(也很强大,可以弥补jbox图片轮播的落点),      这二者基本能搞定所有对话框的情况 2. ...

  4. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...

  6. C# 开发COM组件供c++使用

    C# 开发COM组件供c++使用 Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用 ...

  7. OC开发_整理笔记——友盟分享(社交化组件)

    0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2  输入信息,然后就会获取到key 1.选择社会化分 ...

  8. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  9. [js开源组件开发]query组件,获取url参数和form表单json格式

    query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...

随机推荐

  1. c++virtual inline 是否冲突

    关于inline关键字:effective c++ item33:明智运用inlining.说到:inline指令就像register指令一样,只是对编译器的一种提示,而不是一个强制命令,意思是编译器 ...

  2. 标量子查询优化(用group by 代替distinct)

    标量子查询优化 当使用另外一个SELECT 语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值.这种类型的子查询被称为标量子查询 在某些情况下可以进行优化以减少标量子查询的重复执行,但 ...

  3. java static 执行顺序

    先加载类,然后再实例化类. 继承与static 面试题目如下:请写出程序执行完成之后的结果. package extend; public class X { Y y=new Y(); static{ ...

  4. 许令波老师的java的IO机制分析文章

    深入分析 Java I/O 的工作机制 I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动.这个流动的过程中都涉及到 I/O 问题,可 ...

  5. java 内存泄露 学习

    1.什么事内存泄露 内存泄露就是对象不用了,但是无法回收该对象占用的内存. 2.java不是有垃圾回收机制,咋还会发生内存泄露呢? java的垃圾回收机制就是把无用的对象(GC roots可达与否)用 ...

  6. Android View 事件分发机制详解

    想必很多android开发者都遇到过手势冲突的情况,我们一般都是通过内部拦截和外部拦截法解决此类问题.要想搞明白原理就必须了解View的分发机制.在此之前我们先来了解一下以下三个非常重要的方法: di ...

  7. TCP连接建立的三次握手过程可以携带数据吗?

    前几天实验室的群里扔出了这样一个问题:TCP连接建立的三次握手过程可以携带数据吗?突然发现自己还真不清楚这个问题,平日里用tcpdump或者Wireshark抓包时,从来没留意过第三次握手的ACK包有 ...

  8. God of War - HDU 2809(状态压缩+模拟)

    题目大意:貌似是一个游戏,首先给出卢布的攻击,防御,还有血量,再给出每升一级增加的攻击防御还有血量,然后又N个敌人,杀死每个敌人都会得到一些经验,求杀死完所有敌人时剩余的最大血量. 分析:因为敌人比较 ...

  9. 【转载】nginx 并发数问题思考:worker_connections,worker_processes与 max clients

    注:这个文章主要是作者一直在研究nginx作为http server和反向代理服务器时候所谓最大的max_clients和 worker_connections的计算公式, 其实最后的结论也没有卡上公 ...

  10. Codeforces Round #387(div 2)

    A =w= B VOV C QoQ D 题意:贝尔兰冬天很冷,那么司机要换上冬天专用轮胎才能开车.假设冬天一共有n天,有一套冬天专用轮胎,仅能使用k天,这套轮胎不管什么温度都能用,而夏天用的轮胎只能在 ...