PhoneGap 1.5 버전 cordova.js 간략 분석 3

3642 단어 PhoneGap
기본적으로 아이폰gap1을 업그레이드했습니다.5 후에 원래의 아이폰gap 플러그인은 기본적으로 작동할 수 있는 것을 발견했다. 프로젝트 때문에 아이폰gap의 포지셔닝 능력을 다시 써야 하는데 아이폰gap 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();
			});


분석을 통해 아이폰gap은'cordova/common'모듈을 통해 우리가navigator를 계속 사용할 수 있음을 보증합니다.geolocation에서 함수에 접근합니다.아이폰gap1.5 js 코드의 마지막으로self를 실현했다.boot 방법은 onNativeReady에서 터치할 때 터치합니다. 다음은 그 중의 주요 기능인 윈도우 대상을 확장하는 것입니다.

				// 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를 통해 초기화한 후 속성 방식으로 윈도우즈에 추가하지만, 윈도우즈 대상에 이 속성이 존재하면 덮어쓰지 않습니다.동시에 하나의 기능이 하위 결점이 존재해야 한다면 반드시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를 필요로 한다.common에서platform으로 이동하면android 플랫폼에서 브라우저가 가지고 있는 것이 아니라 확장된 포지셔닝 능력을 강제로 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기