使用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", []);
}
};
这个类有一个函数,三个参数,我们回调用这个对象里面的函数接下来
- 接下来是正题,在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 组件的更多相关文章
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError
报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...
- web前端开发常用组件
web前端开发常用组件 1. 对话框(dialog):jbox(适合对话框等其它功能).colorbox(也很强大,可以弥补jbox图片轮播的落点), 这二者基本能搞定所有对话框的情况 2. ...
- 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick
wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...
- C# 开发COM组件供c++使用
C# 开发COM组件供c++使用 Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用 ...
- OC开发_整理笔记——友盟分享(社交化组件)
0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2 输入信息,然后就会获取到key 1.选择社会化分 ...
- [DeviceOne开发]-do_LinearLayout组件使用技巧
一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...
- [js开源组件开发]query组件,获取url参数和form表单json格式
query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...
随机推荐
- Linux Shell编程(21)——复杂命令
更高级的用户命令find-exec COMMAND \;在每一个find 匹配到的文件执行 COMMAND 命令. 命令序列以 ; 结束( ";" 是 转义符 以保证 shell ...
- 2015第42周六Pgsql全文索引
全文搜索通常也就是文本搜索,它可以提供满足查询的识别自然语言的能力,并且任意性地通过相关性查询进行排序.搜索最常见的类型就是找到所有包含给定的查询术语的记录,并且以相似性的查询顺序返回它们. 对于普通 ...
- mysql数据库还原出错ERROR:Unknown command ‘\\’解决手记
使用mysql命令行客户端,使用source导入备份文件,但导入中出错, ERROR: Unknown command ‘\\’. ERROR: Unknown command ‘\”. ERROR: ...
- poj 1106 Transmitters (枚举+叉积运用)
题目链接:http://poj.org/problem?id=1106 算法思路:由于圆心和半径都确定,又是180度,这里枚举过一点的直径,求出这个直径的一个在圆上的端点,就可以用叉积的大于,等于,小 ...
- dijkstra算法(迪杰斯特拉算法)
dijkstra算法(迪杰斯特拉算法) 用途:有向图最短路径问题 定义:迪杰斯特拉算法是典型的算法,一般的表述通常有两种方式,这里均采用永久和临时标号的方式,该算法要求图中不存在负权边 用永久和临时标 ...
- 自定义使用S缓存方法
<?php $info=S("name","lizhaoyao"); $name=S("name"); var_dump($name) ...
- 开发期间的GWT设置---加快编译速度
随着项目功能的完善,GWT模块(Module)越来越多,当要以web模式编译给测试组使用时,编译的总时间越来越多,我的机器编译完8个模块,需要10分钟左右. 抽空研究了一下GWT的编译参数和GWT编译 ...
- Qt之遍历文件夹(经典详解)
关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除. 首先看简单的: 一.Qt遍历文件夹 ...
- 关于Win8对getElementsByTagName等dom方法兼容性的替代方法
在对Twebbrowser进行dom编程时,引用MSHTML并使用其中的HTMLDocument; IHTMLElementCollection;IHTMLElement;能获得较好的代码提示 其中封 ...
- Spring 3 MVC: Themes In Spring-Tutorial With Example---reference
Welcome to Part 6 of Spring 3.0 MVC Series. In previous article we saw how to add Internationalizati ...