 
			
				18.03.2020, 00:16
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 17.03.2020 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Не могу прочитать данные из IndexedDB
			 
			
		
		
		
		Здравствуйте. 
Есть такой код: 
 
function getRec(Rec, f){ 
	connectDB(function(db){ 
		var request = db.transaction([storeName], "readonly").objectStore(storeName).get(id=0); 
		request.onerror = logerr; 
		request.onsuccess = function(){ 
			Rec = request.result; 
			console.log(Rec); 
		f(request.result ? request.result : -1); 
		} 
	}); 
} 
 
Вывод в консоль самого Rec я вижу в хроме. 
Но, например, Rec.width консоль выдает undefined. 
 
Записать объект Rec {width : 1000, .....} мне удалось, а вот прочитать записанное из другого файла js не могу. 
 
Я только пытаюсь освоить js.  
Помогите, может кто-то рабочий код подкинет? 
Дальше я сам попробую разобраться. 
Заранее благодарен. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				18.03.2020, 18:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Что значит из "другого файла js"? 
С другой html страницы? Вы их запускаете с сервера из одного домена? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				19.03.2020, 21:08
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 17.03.2020 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Я запускаю на локальном компьютере без серверов и прочего. 
Планирую сделать расширение, способное работать вообще без сети. 
Что-то похожее на speed dial 2. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				19.03.2020, 21:36
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 IndexedDB работает по политике одного источника. Т.е базу данных могут использовать страницы только с того же домена, что и страница создавшая базу. При загрузке страниц с локального компьютера из файловой системы понятия домена нет. Поэтому и не работает. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				19.03.2020, 21:45
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 17.03.2020 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Вы не поняли. 
У меня все работает. Я, например, могу записать в IDB запись, т. е. объект вида let D = {"length" : 100, "Q" : 200 ...}. И прочитать D могу при помощи транзакции - в консоли он виден. Но вот к его свойствам доступа нет, например, D.width и т.д. Я подозреваю, что вообще детскую ошибку делаю, возможно, на уровне лексики языка. Поэтому и прошу посмотреть рабочий код, который читает из БД, записывает в нее и редактирует выбранную запись. Я только начинаю изучать JS, поэтому возможны элементарные ляпы. 
А Вам спасибо большое - Вы хотя бы откликнулись на зов чайника. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				19.03.2020, 23:29
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от amon--ra
			 
		
	 | 
 
	
		Вы не поняли. 
У меня все работает. Я, например, могу записать в IDB запись, т. е. объект вида let D = {"length" : 100, "Q" : 200 ...}. И прочитать D могу при помощи транзакции - в консоли он виден. Но вот к его свойствам доступа нет, например, D.width и т.д. Я подозреваю, что вообще детскую ошибку делаю, возможно, на уровне лексики языка. Поэтому и прошу посмотреть рабочий код, который читает из БД, записывает в нее и редактирует выбранную запись.
	 | 
 
	
 
 Ну так покажите код, что было ясно, что записываете, что читаете. 
Что именно видно в консоле?
 
console.log(Rec); 
Что выводится?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				20.03.2020, 13:33
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 08.11.2017 
					
					
					
						Сообщений: 641
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		взял тут  https://developers.google.com/web/il...with-indexeddb
dbPromise.then(function(db) {
  var tx = db.transaction('store', 'readonly');
  var store = tx.objectStore('store');
  return store.get('sandwich');
}).then(function(val) {
  console.dir(val);
});
это Promise
 
return store.get('sandwich')
потом идет then и там уже значение...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				20.03.2020, 17:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 03.02.2020 
					
					
					
						Сообщений: 2,777
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от voraa
			 
		
	 | 
 
	| 
		IndexedDB работает по политике одного источника. Т.е базу данных могут использовать страницы только с того же домена, что и страница создавшая базу. При загрузке страниц с локального компьютера из файловой системы понятия домена нет. Поэтому и не работает.
	 | 
 
	
 
 Я ошибался. Файрфокс действительно не работает при загрузке с локального файла, но Хромовые браузеры работают. Причем им доступна база данных, независимо от того, из какого каталога запускается страница.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.03.2020, 01:19
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 17.03.2020 
					
					
					
						Сообщений: 6
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Доброго времени суток. 
Вот весь код. 
 
 
var indexedDB 	  = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB, 
	IDBTransaction  = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction, 
	baseName 	  = "Base_0", 
	storeName 	  = "Options"; 
	storeName1 	  = "List"; 
 
let f = function() {}; 
let Rec = {}; 
	 
 
function logerr(err){ 
	console.log(err); 
} 
 
function connectDB(f){ 
	var request = indexedDB.open(baseName, 1); 
	request.onerror = logerr; 
	request.onsuccess = function(){ 
		f(request.result); 
	} 
	request.onupgradeneeded = function(e){ 
		e.currentTarget.result.createObjectStore(storeName  , { keyPath: "id" }); 
		e.currentTarget.result.createObjectStore(storeName  1, { keyPath: "path" }); 
		connectDB(f); 
	} 
} 
 
function getRec(Rec, f){ 
	connectDB(function(db){ 
		var request = db.transaction([storeName], "readonly").objectStore(storeName).get(id=0); 
		request.onerror = logerr; 
		request.onsuccess = function(){ 
			Rec = request.result; 
			console.log(Rec); 
		f(request.result ? request.result : -1); 
		} 
	}); 
} 
 
function getStorage(f){ 
	connectDB(function(db){ 
		var rows = [], 
			store = db.transaction([storeName], "readonly").objectStore(storeName); 
 
		if(store.mozGetAll) 
			store.mozGetAll().onsuccess = function(e){ 
				f(e.target.result); 
			}; 
		else 
			store.openCursor().onsuccess = function(e) { 
				var cursor = e.target.result; 
				if(cursor){ 
					rows.push(cursor.value); 
					cursor.continue(); 
				} 
				else { 
					f(rows); 
				} 
			}; 
	}); 
} 
 
function setRec(Rec){ 
	connectDB(function(db){ 
		var request = db.transaction([storeName], "readwrite").objectStore(storeName).put({Value  : Rec, "id": 0}); 
		request.onerror = logerr; 
		request.onsuccess = function(){ 
			return request.result; 
		} 
	}); 
} 
 
function delRec(Rec){ 
	connectDB(function(db){ 
		var request = db.transaction([storeName], "readwrite").objectStore(storeName).delete(Rec  ); 
		request.onerror = logerr; 
		request.onsuccess = function(){ 
			console.log("Record delete from DB:", Rec); 
		} 
	}); 
} 
document.addEventListener('DOMContentLoaded', function init() { 
	 
connectDB(f); 
 
//Rec.width = 500; 
//setRec(Rec); 
//console.log(Rec); 
 
getRec(Rec, f); 
 
console.log(Rec); 
 
}, false); 
 
Это будущее расширение хром. 
Оно работает в браузере на локальной машине.  
Там нет никаких серверов. 
У Вас может есть рабочий код работы с IndexedDB? 
Такой что бы читал и писал. 
Последнее не обязательно - запись целого объекта из этого кода работает. 
Мне всего-то нужно прочитать поля объекта, а не объект целиком. 
Целиком он читается. 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				21.03.2020, 01:32
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		amon--ra, 
 Пожалуйста, отформатируйте свой код!
 
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
 
[html run]
... минимальный код страницы с вашей проблемой
[/html]
 
О том, как вставить в сообщение  исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте  http://javascript.ru/formatting.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |