`
墨日
  • 浏览: 19097 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

PhoneGap 1.5版本 cordova.js 简析 3

 
阅读更多
在基本升级了phonegap1.5后,发现原有的phonegap插件基本还是能够工作的,而因为项目原因我需要重写phonegap的定位能力,却发现无法找到类似phonegap 1.4的定义代码
	PhoneGap.addConstructor(function() {
				navigator._geo = new Geolocation();

				// No native geolocation object for Android 1.x, so use PhoneGap
				// geolocation
				if (typeof navigator.geolocation === 'undefined') {
					navigator.geolocation = navigator._geo;
					Geolocation.usingPhoneGap = true;
				}

				//Geolocation.usePhoneGap();
			});




进过分析发现phonegap通过一个'cordova/common'模块保证我们继续可以使用navigator.geolocation来访问函数.在phonegap1.5 js代码的最后实现了一个self.boot的方法,当onNativeReady时触发,下面就是其中的主要功能 -- 扩展window对象
				// Drop the common globals into the window object, but be nice
				// and don't overwrite anything.
				builder.build(base.objects).intoButDontClobber(window);

				// Drop the platform-specific globals into the window object and
				// do it like a honey badger does it.
				builder.build(platform.objects).intoAndClobberTheFOutOf(window);

				// Call the platform-specific initialization
				platform.initialize();



整个过程分成了三部分, 构建共用对象,构建平台(IOS, android等)对象,初始化平台参数. 而前两者都是通过'cordova/builder'组建实现.通过分析该组建可以发现其中最重要的函数为include,代码如下
function include(parent, objects, clobber) {
	each(objects, function(obj, key) {
				try {
					var result = obj.path ? require(obj.path) : {};

					if (clobber) {
						// Clobber if it doesn't exist or if an
						// override is specified.
						if (typeof parent[key] === 'undefined'
								|| typeof obj.path !== 'undefined') {
							parent[key] = result;
						}
						result = parent[key];
					} else {
						// Don't clobber if something already exists
						// there
						if (typeof parent[key] == 'undefined') {
							parent[key] = result;
						} else {
							// Set result to what already exists, so
							// we can build children into it if they
							// exist.
							result = parent[key];
						}
					}

					if (obj.children) {
						include(result, obj.children, clobber);
					}
				} catch (e) {
					alert('Exception building cordova JS globals: '
							+ e + ' for key "' + key + '"');
				}
			});
}


通过include函数,程序会把在common中定义的object下的所有对象通过path初始化后以属性的方式添加进windows里面,但是如果window对象中存在了该属性则不会被覆盖.同时一个功能如果需要存在子结点,则必须放在obj.children里(同path同级)否则无效.


接着程序会将platform的object下对象,以覆盖的方式添加进window中,主要包括以下几个属性
window.cordova.JSCallback : "cordova/plugin/android/callback"
window.cordova.JSCallbackPolling : "cordova/plugin/android/polling"
window.navigator.app : "cordova/plugin/android/app"
window.device : "cordova/plugin/android/device"
window.File : "cordova/plugin/File"
window.FileReader : "cordova/plugin/FileReader"
window.FileError : "cordova/plugin/FileError"


而如我开始的需求,则需要将 navigator.geolocation 从common 移到 platform中保证在android平台强制使用扩展的定位能力,而非浏览器自带的.
分享到:
评论
1 楼 jkljkl 2012-06-04  
麻烦问一下,“将 navigator.geolocation 从common 移到 platform中”,具体是怎么做的?
我最近也在做phonegap,需要用到定位,正在android的这个问题困扰

相关推荐

    cordova.js 是phonegap开发必备插件JS包

    cordova.js 是phonegap开发必备插件JS包 cordova.js 是phonegap开发必备插件JS包

    cordova3.4 jar和js文件

    在这个主题中,我们主要关注的是 Cordova 3.4 版本,它包含了 `cordova-3.4.0.jar` 和 `cordova.js` 这两个关键文件。 `cordova-3.4.0.jar` 文件是 Cordova 的 Java 库,它是 Android 平台上的核心组件。这个 JAR ...

    phonegap-2.9.1中cordova-2.9.1.jar

    最新版本的phonegap-2.9.1是没有cordova-2.9.1.jar的,这里打包好给大家。

    Cordova3.4的js文件和jar包

    本资源包包含了Cordova 3.4版本的js文件和jar包,这些都是PhoneGap开发过程中的核心组件。 首先,我们要理解Cordova的核心概念。Cordova实际上是一个包装器,它将基于Web的技术转换为可以在各个移动平台上运行的...

    cordova phonegap

    cordova-3.4.0.jar,把这个包扔到工程的libs目录下,这样就不用引入CordovaLib 好用,自己编译的最新版本。希望大家喜欢

    Phonegap调用ios原生代码插件:cordova-ios.js

    Phonegap项目中,使用js脚本调用ios中OC代码,需要使用Phonegap提供的一个脚本插件:cordova.js

    phonegap-1.0.0rc2.zip

    这个“phonegap-1.0.0rc2.zip”文件是PhoneGap的一个早期版本,版本号为1.0.0 Release Candidate 2,这表明它是一个在正式版本发布前的候选版本,可能包含了对早期版本的改进和修复。 PhoneGap的核心理念在于利用...

    phoneGAP2.9.1.zip

    PhoneGap,实际上与Cordova是同义词,它是一个开源框架,允许开发者使用HTML、CSS3和JavaScript等Web技术来构建跨平台的移动应用程序。PhoneGap的核心思想是将Web应用包装在原生的移动应用壳中,使得这些Web应用能够...

    cordova 3.4主文件

    Cordova 3.4 主文件是开发跨平台移动应用的核心组件,主要应用于PhoneGap、Cordova和Ionic等框架。Cordova允许开发者使用Web技术(HTML、CSS和JavaScript)来构建原生的移动应用,它通过封装设备API,使得JavaScript...

    PhoneGap.3.Beginners.Guide.3rd.Edition.1784392286

    Build hybrid mobile applications with PhoneGap/Cordova using HTML, CSS and JavaScript Optimize and increase the performance of you applications with Phonegap/Cordova plugins A step by step guide, ...

    Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012

    《Apress.Beginning.PhoneGap.Mobile.Web.Framework.for.JavaScript.and.HTML5.2012》这本书主要探讨了如何利用PhoneGap框架结合JavaScript和HTML5技术来开发跨平台的移动应用程序。PhoneGap是一个开源框架,它允许...

    cordova.mocks:易于使用的Apache Cordova模拟

    Cordova.Mocks是模拟对象的集合,用于模拟真实设备外部和标准浏览器中的Apache Cordova / Adob​​e Phonegap核心功能和插件功能。 安装 使用该库的最简单方法是通过在bower.json文件中添加以下依赖项来使用拉动它...

    PhoneGap开发入门借鉴.pdf

    PhoneGap是一种开源框架,它允许开发者使用HTML5、CSS3和JavaScript来构建原生移动应用程序。这个教程是针对初学者的PhoneGap开发指南,重点介绍了如何在Eclipse环境中配置和设置PhoneGap项目。 首先,开发者需要...

    PhoneGap/Cordova的支付宝Android插件

    这个插件的目的是桥接JavaScript和Android原生代码,使PhoneGap/Cordova应用能够调用支付宝SDK,实现支付流程。 集成这个插件的过程大致如下: 1. **安装插件**:首先,开发者需要在项目的配置文件(config.xml)...

    phonegap/cordova 案例android版本

    在这个“phonegap/cordova案例android版本”中,我们将深入探讨这两个工具如何协同工作,以及如何在Android平台上创建一个简单的应用。 PhoneGap是由Adobe维护的一个开放源代码项目,它基于Cordova,并提供了额外的...

    cordova.5.1.jar

    基于PhoneGap/Cordova的Hybrid开发所需要的Cordova代码jar包,版本号是较新的5.1

    jxcore-cordova, 用于 Apache cordova/phonegap的jxcore/node.js 插件.zip

    jxcore-cordova, 用于 Apache cordova/phonegap的jxcore/node.js 插件 ( 基于 JXcore插件构建的) 插件插件目标这里项目的目的是:为 Apache Cordova ( Android,iOS ) 创建一个易于使用的node.js 插件详细显示jxcore...

    Eclipse+android+jdk+phonegap开发环境教程.pdf

    其次,需要将 PhoneGap 框架的核心文件 phonegap.js 和 phonegap.jar 复制到对应的文件夹下。 然后,需要修改工程的某些文件,包括将 Activity 的父类改为 DroidGap,并将 setContentView() 行改为 super.loadUrl(...

    phonegap3.4.0如何安装.docx

    PhoneGap 是一个流行的开源框架,它允许开发者使用 HTML5、CSS3 和 JavaScript 来构建跨平台的移动应用程序。PhoneGap 3.4.0 版本的安装过程涉及多个步骤,包括在线安装、制作 Jar 文件以及目录整理。以下是详细的...

    phonegap5.4.1(cordova)拍照并且上传功能的一个Android应用demo

    Cordova是PhoneGap的核心,它是一个原生的移动开发平台,使得Web技术能够访问设备的功能,如摄像头、文件系统和网络。本Android应用Demo展示了如何在基于PhoneGap 5.4.1的项目中实现拍照并上传功能,同时包含了Java...

Global site tag (gtag.js) - Google Analytics