使用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. python functools模块

    functools.partial 作用: functools.partial 通过包装手法,允许我们 "重新定义" 函数签名 用一些默认参数包装一个可调用对象,返回结果是可调用对 ...

  2. 支付宝APP支付Java回调具体步骤

    /** * 支付宝异步请求通知 * * @param request * @return */@RequestMapping(value = "async", method = R ...

  3. vaddin使用技巧

    添加外部jar包的方法: 在项目目录下建立lib文件夹,把外部jar包复制到该文件夹底下.右键该jar包-构建路径-添加至构建路径即可.也可以配置构建路径-库-添加jar.

  4. del重复数

    楼主 发表于: 2010-06-21 11:46:31 本帖最后由 luckycynthia 于 2010-06-21 11:47:46 编辑 在抓取数据后对数据进行操作的途中,有时候会碰到重复数据, ...

  5. JavaScript高级程序设计8.pdf

    基本包装类型 为了便于操作基本类型值,ECMAScript定义了3个特殊的引用类型Boolean,Number和String.这些类型与本章介绍的其他用类型相似,同时也具备与各自的基本类型相应的特殊行 ...

  6. [zz]android的logcat详细用法

    Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用.      一.使用logcat命令的目的: ...

  7. linux0.12 编译过程

    感谢这篇文章的作者:    http://www.cnblogs.com/strugglesometimes/p/4231359.html 编译是个很蛋疼的事情,本想把linux0.12在bochs上 ...

  8. win8.1 无法安装 net framework3.5的解决办法

    近期给重装系统时,发现Windows8.1无法安装.net framework 3.5,即使我离线下载了安装文件,还要求安装2.0和3.0....而且无法从Windows更新中获取,因此百度到以下方案 ...

  9. 查询grep结果的前后n行

    linux系统中,利用grep打印匹配的上下几行   如果在只是想匹配模式的上下几行,grep可以实现.   $grep -5 'parttern' inputfile //打印匹配行的前后5行   ...

  10. delphi TOpenDialog

        TOpenDialog     procedure TForm1.Button1Click(Sender: TObject);begin  with TOpenDialog.Create(ni ...