玩转cordova

写在前面

话说HTML5和原生代码这个口水仗打了很久了。打口水仗的人多半都是喷口水而已。这其中的奥妙真正干活的人才知道。如果说HTML5能完全代替原生,那要原生干什么?如果说HTML5完全不可用,那这么多牛逼的网站是打脸的么?所以说呢,webview在android和ios就是个控件,你就好好的当他控件来用。webview是一个有完整UI系统和生态系统的控件。用好了那是好处多多的。

好,那么问题来了。作为一个控件,是少不了和原生代码交互的。但是常见的用法似乎只是用来打开一个网页。这个勉强算是 "原生代码 call js", 还是一次性的。但是"js call 原生"要怎么玩呢?我曾经研究过一番,在前人的基础上写了个工具https://github.com/fangj/WebViewJavascriptBridge 但是不太完善。那么有现成的cordova是要用起来的。

在说cordova之前。我大概说一下webview和原生怎么交互的:

  • Android

Android->JS : loadUrl

JS->Android: JavascriptInterface

  • IOS IOS->JS: loadUrl

    JS->IOS: loadUrl, IOS拦截自定义schema

下面正式开始讲:

主要内容都在文档里

http://cordova.apache.org/docs/en/4.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface

http://cordova.apache.org/docs/en/4.0.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide

http://cordova.apache.org/docs/en/4.0.0/guide_platforms_android_plugin.md.html

http://cordova.apache.org/docs/en/4.0.0/guide_platforms_ios_plugin.md.html

  • 用命令行工具生成cordova工程

    sudo npm install -g cordova
    cordova create hello com.example.hello HelloWorld
    cd hello
    cordova platform add ios
    cordova platform add android
    cordova build

此时android和ios的工程已经生成,可以用你的IDE打开运行了。

  • 开始写插件。先看JS里怎么调用:

    cordova.exec(function(winParam) {},
                 function(error) {},
                 "service",
                 "action",
                 ["firstArgument", "secondArgument", 42, false]);

几个参数分别是:成功回调。失败回调。要调用的对象(service)。要调用的方法(action)。方法的参数[...]。

  • 在IOS里怎么写插件

Echo.h

    #import "CDVPlugin.h"

    @interface Echo : CDVPlugin
    - (void)echo:(CDVInvokedUrlCommand*)command;
    @end

Echo.m

    #import "Echo.h"

    @implementation Echo
    - (void)echo:(CDVInvokedUrlCommand*)command
    {
        CDVPluginResult* pluginResult = nil;
        NSString* echo = [command.arguments objectAtIndex:0];

        if (echo != nil && [echo length] > 0) {
            NSLog(@"ios received %@",echo);
            NSLog(@"ios send OK");
            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
        } else {
            NSLog(@"ios send fail");
            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
        }

        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
    }
    @end

还有很关键的。在ios工程目录下找到config.xml,加上这么一句

 <feature name="Echo">
    <param name="ios-package" value="Echo" />
    <param name="onload" value="true" />
</feature>

feature name是JS中调用的插件名,ios-package的value是IOS中对应的类名。

  • Android 中插件怎么玩

    Echo.java

    package org.apache.cordova.plugin;
    
    import android.util.Log;
    import org.apache.cordova.CallbackContext;
    import org.apache.cordova.CordovaPlugin;
    import org.json.JSONArray;
    import org.json.JSONException;
    
    /**
     * Created by fangjian on 14-11-28.
     */
    public class Echo extends CordovaPlugin {
        @Override
        public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
            if (action.equals("echo")) {
                String message = args.getString(0);
                this.echo(message, callbackContext);
                return true;
            }
            return false;
        }
    
    
    
    private void echo(String message, CallbackContext callbackContext) {
        if (message != null &amp;&amp; message.length() &gt; 0) {
            Log.d("cordova plugin", "android sent OK");
            callbackContext.success(message);
        } else {
            Log.d("cordova plugin", "android sent Fail");
            callbackContext.error("Expected one non-empty string argument.");
        }
    }
    

    }

同样,需要找到Android工程目录下的config.xml,加上这么一句

<feature name="Echo">
    <param name="android-package" value="org.apache.cordova.plugin.Echo" />
    <param name="onload" value="true" />
</feature>

android-package是android对应的类名。

时间: 2024-10-13 02:51:42

玩转cordova的相关文章

cordova 生成发行版apk,并添加证书 – 畅玩Coding

原文:cordova 生成发行版apk,并添加证书 – 畅玩Coding 首先jdk生成证书. 1.进入jdk安装目录 D:\Java\jdk1.7.0\bin 2.执行命令 keytool -genkey -v -keyalg RSA -keystore 17taoquan.keystore -alias 17taoquan -validity 1024 参数说明: 17taoquan.keystore 为文件名 17taoquan 为别名 2014 为有效期 3.根据提示输入密钥等信息. 4

cordova 常用插件

一.插件相关常用命令 1.查看所有已经安装的插件    cordova plugin ls  2.安装插件(以camera插件为例)    cordova plugin add cordova-plugin-camera  3.删除插件(以camera插件为例)    cordova plugin rm cordova-plugin-camera  4.更新插件    cordova plugin update 二.常用的Cordova插件 1.Console(调试控制台)    让程序可以在控

使用Ionic + Apache Cordova开发跨平台混合型的移动应用

JavaScript 写多了,要想真正提高js水平,研究其他js框架源码是不错的选择.Github上大部分都是js.css相关的项目,可以有目的性的 check out 下来,研读研读,还是非常收益的,跟随nb的人,也会慢慢变的nb. 场景:有一个朋友,他公司是做移动应用开发的,3个安卓开发人员,3个 ios,然后是 java 开发,美工 ,10多个人的公司,主要是以接项目为主,一个项目(电商.微信.聊天 类型的)大概在20万左右, 差不多1个半月 做完(代码质量能不能保证,不知道,不过我觉得开

使用Cordova框架把Webapp封装成Hybrid App实践——Android篇

公司没有IOS和没有安卓开发人员,前端后端都是需要自己玩前几天技术经理说有一个需求要把webapp封装成Hybrid App,现已完成.记录一下从中遇到的问题和需要用到的开发环境的配置 将Webapp封装成Hybrid App有如下步骤 1.下载安装1.8的JDK,并且配置环境变量        (注意:最新版本的cordova,必须要下载1.8的JDK不然会报错) 2.下载安装Ant构建工具并且配置环境变量      (注意:Ant目录不能是中文,不然编译不成功) 3.下载安装android并

【Cordova】Cordova安卓开发入门

引言 微软开启新战略--移动为先,云为先.作为开发者,首先感受到的变化就是VS2015预览版增加了对各种跨平台框架的支持,极大方便了我们的开发.其中号称原生性能的Xamarin要收费,挺贵的,一般人还真玩不起来.话说什么时候微软把Xamarin收购然后直接免费,那简直画面太美了不敢看.不过可能性极小就是了,毕竟Win10才是微软的宝贝.还好,我们还有Cordova可以玩的,只要你懂Html和JS都可以开发APP了.下面,我就简单说说. Cordova 命令行 在VS2015之前,做Cordova

cordova plugin 大全及安装命令

前言:用cordova开发hybrid app的过程中,由于是html5开发的app,在手机上很多权限受限制,这就导致了我们需要安装很多插件来弥补这一缺点.在网上搜了好久,感觉都不是很全,所以自己整理了一份cordova plugin清单. 1.获取当前应用的版本号 cordova plugin add cordova-plugin-app-version 2.获取网络连接信息 cordova plugin add cordova-plugin-network-information 3.获取G

瞎折腾之 VS2013 Cordova项目的创建与配置

扯淡 前段时间突然看见了微软发布了Cordova的跨平台开发移动端.我就来了兴趣,打算玩一玩,折腾一下.花了我2个晚上终于成功的配置好了环境.时间主要花在了下载谷歌东西上面. 不熟悉的小伙伴们请先看下面的文章进行了解一下 http://blogs.msdn.com/b/ericsk/archive/2014/05/19/visual-studio-2013-and-apache-cordova-integration.aspx http://c.jinhusns.com/cms/c-929 当然

cordova插件使用集合

1.获取当前应用的版本号 cordova plugin add cordova-plugin-app-version 2.获取网络连接信息 cordova plugin add cordova-plugin-network-information 3.获取GPS数据 cordova plugin add cordova-plugin-geolocation 4.Visual Notification(可视化消息提醒) cordova plugin add cordova-plugin-dialo

【精品】北京赛车计划冠军定位玩法技巧

車車是一種投資,我們的目標是:細水長流,見好就收,不求日金千金,只求長期穩定!許多人賠本的原因:1. 資金不足,卻大把下注,跟到第4期不出,錢不夠了,心慌了.有人孤注一擲,衝到第5期中了,嚇的半死.有人不敢跟,第5期出號了,氣死, 然後再跟新計劃,沒錢了,郁悶死.這兩種做法都不對,既然是以投資的心態做事,就應該計劃好翻倍的本錢,做到99%的穩賺,狀況不對就要及時止損. 看著連續中,就是不敢跟,最後咬牙跟了,馬上挂了.于是開始哭,我運氣咋這麽差.不買就中,一買就挂.相反,有些人專門等挂,一挂就上,