windows 8, Android, IOS 에 indexedDB 를 사용 합 니 다.

최근 수중 에 모 바 일 크로스 플랫폼 기술 을 사용 해 야 하 는 프로젝트 가 있다.인터넷 에서 찾 아 보 니 비교적 좋 은 크로스 플랫폼 개발 도구 가 두 개 있 었 다.
1、Cordova/PhoneGap
이 두 가 지 는 같은 프로젝트 로 Phone Gap 의 일부 핵심 코드 가 Apache 재단 개원 에 들 어가 Cordova 로 이름 을 바 꿨 다.하지만 폰 갭 은 여전히 팀 이 계속 개발 하고 있다.그래서 지금 이 두 가지 항목 이 동시에 존재 한다.
Phonegap 사이트 주소:http://phonegap.com/
2、Corona
게임 개발 크로스 플랫폼 도 구 는 주로 게임 개발 이나 성능 에 대한 요구 가 높 은 응용 에 도 적합 하 며 windows 8 은 잠시 지원 되 지 않 습 니 다.
Corona 사이트 주소:http://www.coronalabs.com/
이 두 도구 의 문 서 를 뒤 져 보 니 모두 영어 로 되 어 있어 서 가끔 눈 이 어지럽다.로 컬 저장 소 에 좋 은 것 은 Phonegap 입 니 다. Android, IOS 의 websql 을 지원 하고 windows 8 에 서 는 indexedDB 를 지원 합 니 다.w3c 는 indexedDB 를 밀 었 기 때문에 나중에 websql 을 포기 할 것 입 니 다. 그래서 저 는 indexedDB 를 로 컬 에 저 장 된 데이터 베이스 로 선택 하 였 습 니 다.
하지만 Phonegap 는 안 드 로 이 드, IOS 의 웹 sql 만 지원 합 니 다. 이 건 어떻게 해 야 하나 요?
정 답 은 중간 에 어 울 리 는 층 을 쓰 는 것 입 니 다. 상부 에 서 는 indexedDB 의 인 터 페 이 스 를 호출 합 니 다. 이 중간 층 을 통 해 안 드 로 이 드, IOS 상하 층 에 서 는 websql 을 호출 하고 windows 8 에 서 는 indexedDB 를 호출 합 니 다.그럼 문제 해결 되 는 거 아니 야?
반복 적 으로 바퀴 를 만 드 는 것 을 피하 기 위해 서 나 는 먼저 구 글 을 한 번 해 보 았 는데, 뜻밖에도 정말 내 생각 과 같은 사람 이 있다 는 것 을 알 게 되 었 다. 외국인 이 쓴 js 라 이브 러 리: IndexedDBShim. js.나 는 그것 을 다운로드 해서 테스트 를 해 보 았 는데, 많은 문제 가 나 와 서 사용 할 수 없 었 다. 그 중 가장 큰 문 제 는:

SECURITY_ERR: DOM Exception 18

오류 가 발생 한 곳 은 함수 function openDB (oldsVersion) 의 이 문장 입 니 다.
var db = window.openDatabase(name, 1, name, DEFAULT_DB_SIZE);
             
우 리 는 이 함 수 를 Phonegap 의 인터페이스 호출 방식 으로 수정 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.

function openDB(oldVersion){
				document.addEventListener("deviceready", onDeviceReady_db, false);
				
				function onDeviceReady_db() {
        			
        			var db = window.openDatabase(name, 1, name, DEFAULT_DB_SIZE);
                req.readyState = "done";
                if (typeof version === "undefined") {
                    version = oldVersion || 1;
                }
                if (version <= 0 || oldVersion > version) {
                    idbModules.util.throwDOMException(0, "An attempt was made to open a database using a lower version than the existing version.", version);
                }
                
                db.transaction(function(tx){
                    tx.executeSql("CREATE TABLE IF NOT EXISTS __sys__ (name VARCHAR(255), keyPath VARCHAR(255), autoInc BOOLEAN, indexList BLOB)", [], function(){
                        tx.executeSql("SELECT * FROM __sys__", [], function(tx, data){
                            var e = idbModules.Event("success");
                            req.source = req.result = new idbModules.IDBDatabase(db, name, version, data);
                            if (oldVersion < version) {
                                // DB Upgrade in progress 
                                sysdb.transaction(function(systx){
                                    systx.executeSql("UPDATE dbVersions set version = ? where name = ?", [version, name], function(){
                                        var e = idbModules.Event("upgradeneeded");
                                        e.oldVersion = oldVersion;
                                        e.newVersion = version;
                                        req.transaction = req.result.__versionTransaction = new idbModules.IDBTransaction([], 2, req.source);
                                        idbModules.util.callback("onupgradeneeded", req, e, function(){
                                            var e = idbModules.Event("success");
                                            idbModules.util.callback("onsuccess", req, e);
                                        });
                                    }, dbCreateError);
                                }, dbCreateError);
                            } else {
                                idbModules.util.callback("onsuccess", req, e);
                            }
                        }, dbCreateError);
                    }, dbCreateError);
                }, dbCreateError);
    			}
				
                
            }

나 는 테스트 코드 를 좀 썼 는데, 단지 간단 한 첨삭 과 수정 일 뿐이다.테스트 는 모두 순조롭게 통과 되 었 다.전체 항목 의 코드 를 첨부 파일 로 올 렸 으 니 아래 에서 다운로드 하 세 요.안 드 로 이 드 플랫폼 에서 Eclipse 개발 도구 입 니 다.보 기 를 실행 하려 면 Android 개발 홈 페이지 에서 ADT 를 다운로드 하면 프로젝트 를 열 면 실행 결 과 를 볼 수 있 습 니 다.

좋은 웹페이지 즐겨찾기