localstorage service script
помогите добить скрипт. примерно понимаю что нужно сделать, но не до конца могу понять как реализовать.
пытаюсь решить проблемы с локальным хранилещем в сафари(при включенном privat mode) мне нужно написать сервис который будет проверять работает ли локальное хранилище и если не работает то хранить данные в обьекте. проверку примерно вроде как сделал. а вот как хранить данные в обьекте и как сделать данный сервис публичным что бы по всему проекту его могли использовать не пойму. по идее должен быть публичный метод какой то. больше всего не понимаю как хранить данные потому что они по всему проекту разные. набросал 2 вараинта. какой то из них хоть немного приближен к реальности?)) ///v1 var localStorage = angular.module('moduleName', []); moduleName.factory('localStorageService', function() { var storageSupportedService; //isStorage? var hasLocalStorageSupport = 'localStorage' in $window && $window.localStorage !== null; if (hasLocalStorageSupport) { var testKey = 'key'; try { $window.localStorage.setItem(testKey, '1'); $window.localStorage.removeStorage(testKey); } catch (e) { // $scope.result = object; // return $scope.result; // localStorage.setItem( "obj", JSON.stringify( obj ) ); hasLocalStorageSupport = false; } } return storageSupportedService; }); ///v2 var localStorage = angular.module('moduleName', []); moduleName.factory('localStorageService', function() { var storageSupportedService; //isStorage? function isLocalStorageSupported() { var testKey = 'key', storage = window.localStorage; try { storage.setItem(testKey, '1'); storage.removeItem(testKey); return localStorageName in window && window[localStorageName]; } catch (error) { // return $scope.result; // localStorage.setItem( "obj", JSON.stringify( obj ) ); return false; } } return storageSupportedService; }); |
ExXxTaSy,
Цитата:
Цитата:
app.service('foo', function() { this.bar = 'baz' }); |
Цитата:
я думал что вариант решения попроще. что то из моего дописать никак? а то мне не совсем понятно что в том примере происходит. не все моменты. |
Цитата:
ну а вообще то да уже это делать для всех браузеров. |
Цитата:
|
Цитата:
Цитата:
$window.localStorage ... Цитата:
angular .module('moduleName', []) .service('foo', function() { this.bar = 'baz' }) .controller('FooCtrl', ['foo', function(foo){ alert(foo.bar); }]) |
Цитата:
то есть если я возьму этот кусок .module('moduleName', []) .service('foo', function() { this.bar = 'baz' }) .controller('FooCtrl', ['foo', function(foo){ alert(foo.bar); }]) в него вставлю то что вы по ссылке дали, то все будет ок?) теперь вопрос что куда ставить) сорри. я просто немного изменил квалификацию, и на жутких нервах, постоянно в панике. нужно както бы успокоиться) и в примере не 20 строк а около 200 без коментов |
такс. начинаю врубатся.
мне нужно подрубить это файл что вы бросили в ссылке. а далее что то типа ngular.module('app', [ 'ngStorage' ]). controller('Ctrl', function( $scope, $localStorage ){ $scope.$storage = $localStorage.$default({ ... }); }); вот тут то и должно как то происходить типа работа с выбором хранилища? |
так. если я верно понял.
нужно подключить тот скрипт что вы бросили. далее как то его использовать по принципу angular.module('app', [ 'ngStorage' ]). controller('Ctrl', function( $scope, $localStorage ){ $scope.$storage = $localStorage.$default({ x: 42 }); }); только не пойму как |
я еще больше запутался
|
и не пойму ту библиотеку что вы бросили. где она хранит данные в обьекте? там проде бы 2 хранилища. sessionStorage, localStorage
мне это не подходит. в сафари в примат моде оба хранилища не работают. нужно именно в обьекте сервиса все хранить |
var localStorage = angular.module('localStorage', []); localStorage.factory('localStorageService', function() { var storageSupportedService; function isLocalStorageSupported() { var testKey = 'key', storage = window.localStorage; try { storage.setItem(testKey, '1'); storage.removeItem(testKey); return localStorageName in window && window[localStorageName]; } catch (e) { // return false; if (e == QUOTA_EXCEEDED_ERR) { //do obj storage } } } return storageSupportedService; }); this.storageData = function () { module.exports = { name: 'memoryStorage', read: read, write: write, each: each, remove: remove, clearAll: clearAll }; var memoryStorage = {}; function read(key) { return memoryStorage[key] } function write(key, data) { memoryStorage[key] = data } function each(callback) { for (var key in memoryStorage) { if (memoryStorage.hasOwnProperty(key)) { callback(memoryStorage[key], key) } } } function remove(key) { delete memoryStorage[key] } function clearAll(key) { memoryStorage = {} } }; что то такое пока что получается. гляньте кто то плз |
вопрос решил так:
var fakeLocalStorage = function() { var fakeLocalStorage = {}, storage; // If Storage exists we modify it to write to our fakeLocalStorage object instead. // If Storage does not exist we create an empty object. if (window.Storage && window.localStorage) { storage = window.Storage.prototype; } else { // We don't bother implementing a fake Storage object window.localStorage = {}; storage = window.localStorage; } // For older IE if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); } var dispatchStorageEvent = function(key, newValue) { var oldValue = (key == null) ? null : storage.getItem(key), // `==` to match both null and undefined url = location.href.substr(location.origin.length), storageEvent = document.createEvent('StorageEvent'); // For IE, storageEvent.initStorageEvent('storage', false, false, key, oldValue, newValue, url, null); window.dispatchEvent(storageEvent); }; storage.key = function(i) { var key = Object.keys(fakeLocalStorage)[i]; return typeof key === 'string' ? key : null; }; storage.getItem = function(key) { return typeof fakeLocalStorage[key] === 'string' ? fakeLocalStorage[key] : null; }; storage.setItem = function(key, value) { dispatchStorageEvent(key, value); fakeLocalStorage[key] = String(value); }; storage.removeItem = function(key) { dispatchStorageEvent(key, null); delete fakeLocalStorage[key]; }; storage.clear = function() { dispatchStorageEvent(null, null); fakeLocalStorage = {}; }; }; // if (typeof window.localStorage === 'object') { try { localStorage.setItem('localStorageTest', 1); localStorage.removeItem('localStorageTest'); } catch (e) { fakeLocalStorage(); } } else { // Use fake localStorage for any browser that does not support it. fakeLocalStorage(); } |
Часовой пояс GMT +3, время: 11:49. |