zoukankan      html  css  js  c++  java
  • phonegap插件加载与使用

    有朋友问能不能在CanTKAppBuilder开发的APP里发送UDP数据,HTML5里只能用HTTPS/HTTP/WebSocket几种通讯方式,要使用UDP需要通过phonegap打包成APK等特定平台的安装包。为此我写了一个UDP的例子,但是运行时遇到的问题,所以花了些时间去研究phonegap加载udp插件的过程。

    1.添加需要的插件

    在cordova_plugins.js中存放了APP引用的插件列表,可以用phonegap plugin add添加,如:

    phonegap plugin add org.chromium.sockets.tcp

    2.加载cordova_plugins.js

    exports.load = function(callback) {
        var pathPrefix = findCordovaPath();
        if (pathPrefix === null) {
            console.log('Could not find cordova.js script tag. Plugin loading may fail.');
            pathPrefix = '';
        }
        injectIfNecessary('cordova/plugin_list', pathPrefix + 'cordova_plugins.js', function() {
            var moduleList = require("cordova/plugin_list");
            handlePluginsObject(pathPrefix, moduleList, callback);
        }, callback);
    };
    
    
    function handlePluginsObject(path, moduleList, finishPluginLoading) {
        // Now inject the scripts.
        var scriptCounter = moduleList.length;
    
    
        if (!scriptCounter) {
            finishPluginLoading();
            return;
        }
        function scriptLoadedCallback() {
            if (!--scriptCounter) {
                onScriptLoadingComplete(moduleList, finishPluginLoading);
            }
        }
    
    
        for (var i = 0; i < moduleList.length; i++) {
            injectIfNecessary(moduleList[i].id, path + moduleList[i].file, scriptLoadedCallback);
        }
    }

    3.插件的JS文件中调用cordova.define把自己注册到phonegap的模块列表里

    cordova.define("in.girish.datagram.datagram", function(require, exports, module) {

    4.调用者不需要直接引用插件的JS,而是调用cordova.require去从插件列表中查找,然后使用

    var dgram = cordova.require('in.girish.datagram.datagram');
            var client = dgram.createSocket("udp4");
            client.send("hello cantk", "192.168.1.168", 41234, function(err) {
              console.log(err ? JSON.stringify(err) : "success");
              client.close();
            });

    插件使用者只需要关注第1步和第4步即可。第2步由phonegap实现,第3步由插件提供者实现。

    但是第3步要注意,老版本要求插件自己调用cordova.define,新版本会自动加上这个定义。所以新版本phonegap使用老版本的插件就会存在问题,导致重复定义而无法使用,需要手动删除这个定义。

  • 相关阅读:
    CSS3 转换2D transform
    jquery中this和event.target的区别
    jQuery中事件对象e的事件冒泡用法示例(事件冒泡与阻止冒泡)
    表单Checkbox全选反选全不选
    表单获取焦点失去焦点
    表单非空校验
    无刷新评论
    定时器.倒计时
    虚拟硬件调整
    虚拟机功能
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13333030.html
Copyright © 2011-2022 走看看