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 를 다운로드 하면 프로젝트 를 열 면 실행 결 과 를 볼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.