webapp应用---cordova.js 3.7.0插件安装总结
今天是2014年的最后一天,年终总结什么的就不写了。记录一下今天的工作内容。如果不知道phoneGap,那么就不需要往下看了,phoneGap现在已经叫cordova了,叫什么不重要,重要的是它对web移动应用的开发很重要,如果你正在查找关于cordova.js 插件安装方面的工作,那么本文或许对你有用。
cordoval.js目前最新的版本是3.7.0,较之前的2.xxx系列,最大的变化是把功能进行了插件化,或者说是模块化也行。这样做的好处呢是开发者可以按需加载自己的功能插件,减小文件体积,同时也在代码方面做了一些优化,提升了效率。插件化的管理方式,方便进行扩展。
看到有这么多的好处,我们就动心了,直接升级到了3.7.0。可是在升级的过程中,却遇到了不少的问题。这次改造的前端工作,就由我一人全全负责了。从官网下载下来的cordova.js核心文件分成了ios,android等多个版本,而且每个版本都不含有任何插件,比如摄像头,读文件,播放音频等等。所以,改造的第一项工作就是把我们项目中需要的功能插件全部加载上去。
首先提一下我们项目需要用到的插件有播放音频,消息提示,输出日志等。我先是去官网看了一下插件的说明和用法,可是看了半天,也没有找到怎么用的方法,那些插件的说明写的实在是太简单了。没办法,只有去百度了,可是百度来百度去,全是一些过时的用法,难怪别人说查技术资料用百度不靠普。好不容易,找了几篇看上去还算粘边的文章,满心欢喜的照着做了一通,现在想想全是走了弯路。所以这里就不引用它们的教程了。
其实现在回过头来看,只要弄懂一个插件的用法,其它的就触类旁通了。就拿音频插件来说吧。cordova.js 采用了 amd 这种规范,比如定义一个模块用define,调用一个模块用reqiure, 那么要挂载一个插件,肯定要先有一个音频模块。这个在官方的github上有了,直接下载下来,找到对应平台的js文件就行,只是呢添加这个模块有两种方式,一种呢是通过在index.html中用script标签引入的方式,另一种是通过直接在cordova.js中粘贴插件的js源码。我选择的是后一种,但是直接粘贴之后发现,在android真机上调用插件播放声音的时候,eclipse的日志上有错误提示说Media未定义。于是我就纳闷了,仔细看了一下Media.js的源码,大至是这样的:
(function(){
这里是cordova.js的作用域
.................
var utils = require('cordova/utils'),
exec = require('cordova/exec');
var mediaObjects = {};
/**
* This class provides access to the device media, interfaces to both sound and video
*
* @constructor
* @param src The file name or url to play
* @param successCallback The callback to be called when the file is done playing or recording.
* successCallback()
* @param errorCallback The callback to be called if there is an error.
* errorCallback(int errorCode) - OPTIONAL
* @param statusCallback The callback to be called when media status has changed.
* statusCallback(int statusCode) - OPTIONAL
*/
var Media = function(src, successCallback, errorCallback, statusCallback) {
// successCallback optional
................
module.exports = Media;
这里其实只要把Media前面的var去掉,就可以把Media提升为全局变量,但是当时我居然没有看出来。不过这样也不是一个好的解决方案,因为cordova的核心功能都是用
define定义的,我这样直接添加功能代码,显然与作者的插件化思想是相背离的。于是呢,我就参考以前版本的写法,用define进行了定义。变成如下这个样子:
define("cordova/plugin/Media", function(require, exports, module) {
var Media = function
....
module.exports = Media;
});
可是问题又来了,这样做还是只是定义一件插件而已,怎么去调用它呢?其实真的很简单,直接在cordova.js末尾,也就是 cordova = require('cordova')后面加一个Media=require('cordova/plugin/Meida');就可以了。当时我怎么就没有想到呢。可能是太过相信cordova的插件机制了,它还没有这么智能。不过呢,这还没有完,想想ios我们也是要兼容的,所以ios平台对应的代码也要加上。cordova为什么不把各个平台通用的部分提出来呢?这样的话,对于兼容多个平台的情况,cordova的体积又可以大大减小了。
吐糟归吐糟,后继的工作还是要做好,陆续把其它的插件也补上。不过呢,我要在此多说一句,别只顾着复制粘贴,有些内容需要根据实际情况进行修改一下。比如console.log这个插件,用define进行包装的时候,为了统一,最好都写成
define("cordova/plugin/xxx")的形式,这样维护的时候一看就明白了. 还有一个好处就是可以方便插件机制进行自动化加载,不过这个好处我还没有研究透,等看懂源码再细说。另外还有一个坑,有一处代码调用了require("cordova/plugin_list")这样的代码,但是却没有看到定义的地方,比如说define("cordova/plugin_list"),虽然在eclipse上编译安装的时候,生成apk没有问题,真机上也正常用行了,但是java那边的兄弟说在服务端打包的时候会报错,说找不到plugin_list.js这个文件。所以需要补上这个定义:
define("cordova/plugin_list",function(require, exports, module){
var plugin_list = [];
module.exports = plugin_list;
})
大致就是这么一个东东,具体的代码我不记得了,反正github上是有的下的。
最后呢,关于这个require/define的用法,我专门抽出来,然后进行了一些简化,方便大家直观的理解它的运行原理,如果觉得好,还可以在自己的项目中直接使用。
项目地址: https://github.com/bjtqti/mini-require
好了,总算写完了。掌声送给自己!
webapp应用---cordova.js 3.7.0插件安装总结的更多相关文章
- 同时处理html+js+jquery+css的插件安装(Spket&Aptana插件安装)
Spket 在线安装方法:Help->Software Updates(或者Install New Software)->Add site Location:http://www.spke ...
- MyEclipse 8.5 开发环境配置,汉化,Aptana2.0插件,SVN 插件,Flex Builder 3/4 插件安装(转载)
转载地址http://elf8848.iteye.com/blog/630864 下载MyEclipse 8.5 可以通过代理http://www.proxyie.cn/访问MyEclipse的官方网 ...
- HiShop2.x版本中的上传插件分析,得出所用的模板语言为Underscore.js 1.6.0且自己已修改
效果: 上传组件非常的酷,但是分析其使用JS写法使用了模板语言的,代码如下: <script type="text/j-template" id="tpl_popb ...
- cordova 开发属于自己的插件---android
还是需要开发出自己的插件的... 我的cordova version is 4.0.0 1.需要新建一个文件夹为 myplugin 1.1在myplugin文件夹下 新建 plugin.xml文件 ...
- cordova+Android Studio 1.0+ionic+win7(转)
转自http://blog.csdn.net/fuyunww/article/details/42216125 目录(?)[-] 在项目目录下执行 a创建工程 b添加平台支持 c添加插件在Androi ...
- cordova 环境配制和创建插件
环境配制 英文网站:http://cordova.apache.org/ 中文网站:http://cordova.axuer.com/ 安装Cordova Cordova的命令行运行在Node.js ...
- elasticsearch5.0及head插件安装
这个瞎jb整了半天.准备把es2.4升级到5.0,结果老报错 环境:centos6.5+es2.4是ok的换成es5就出毛病.也不能说啥 ,我用的是最新的 源码解压启动时候报错,具体错误for ...
- 在ionic/cordova中使用百度地图插件
在ionic项目中,如果想实现定位功能,可以使用ng-cordova提供的cordova-plugin-geolocation. 但由于高墙的缘故,国内andorid环境下,此插件不起作用(ios环境 ...
- Jquery.validate.js表单验证插件的使用
作为一个网站web开发人员,以前居然不知道还有表单验证这样好呀的插件,还在一行行写表单验证,真是后悔没能早点知道他们的存在. 最近公司不忙,自己学习一些东西的时候,发现了validation的一个实例 ...
随机推荐
- elasticsearch完全匹配
$params = array( "body" => array( "query" => array( "filtered" = ...
- thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)
关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1) Linux下环境配置 ...
- WIM镜像添加多语言支持
起初的想法: intel 600p虽然速度一般,但pcie还是值得一试的.购买后发现原来的win7版本无法识别就找了KB2990941和KB3087873两个补丁,成功识别出了硬盘.期间通过dezor ...
- vim插件之tabular,代码对齐强迫症必备
本周整理一批别人写的代码,要处理好所有的注释和缩进. 碰到那种大片的赋值或者注释或者宏定义,但又没对齐的,简直太难看了. 于是手工对了几个,觉得确实不是人干的活,心想这种需求应该有工具自动搞定才对啊, ...
- RxJava 备注
RxJava是一个采用观察者模式的异步框架,本文给出几个基本的使用例子. 1.配置依赖: compile 'io.reactivex:rxjava:1.0.14' compile 'io.reacti ...
- Nodejs之MEAN栈开发(一)---- 路由与控制器
因为工作需要,最近再次学习了node,上一次学习node是2014年,纯粹是个人兴趣,学了入门之后没有运用,加上赶别的项目又不了了之.这次正好捡起来.废话不多说,这里的MEAN指的是Mongodb.E ...
- [.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)
[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux) 1.关于跨平台 上篇中介绍了MVC的发展历程,说到ASP.NET ...
- SQL Server null知多少?
null是什么? 不知道.我是说,他的意思就是不知道(unknown). 它和true.false组成谓词的三个逻辑值,代表“未知”.与true和false相比,null最难以令人捉摸,因为它没有明确 ...
- Leetcode 刷题计划
Two Sum 21.4% Medium Given an array of integers, return indices of the two numbers such that t ...
- JavaScript学习笔记之Array
数组的定义: 1,var arr=new Array(); -->数组是特殊的对象,typeOf的返回值是object arr[0] arr[1] ... 2,var arr=new ...