Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   localStorage для IE6-7 (https://javascript.ru/forum/project/29013-localstorage-dlya-ie6-7-a.html)

devote 11.06.2012 07:53

localStorage для IE6-7
 
Привет всем, слепил тут lacalStorage для ишака 7, но и в 6-ом тоже думаю будет работать. Без какого либо использования кукисов!!!
вот тут пример: http://storage.spb-piksel.ru/
<!DOCTYPE html>
<html>
    <head>
        <meta charset=utf-8 />
        <title>:)</title>
		<script type="text/javascript" src="https://raw.github.com/devote/localstorage/master/storage.min.js"></script>

		<script type="text/javascript">
			function saveData() {
				var storageKey = document.getElementById( 'storageKey' ),
					storageValue = document.getElementById( 'storageValue' );

				if ( storageKey.value ) {
					localStorage.setItem( storageKey.value, storageValue.value );
					alert( "Data successfully stored" );
				} else {
					alert( "Please enter storage KEY item" );
				}
			}

			function loadData() {
				var storageKey = document.getElementById( 'storageKey' ),
					storageValue = document.getElementById( 'storageValue' );

				if ( storageKey.value ) {
					storageValue.value = localStorage.getItem( storageKey.value );
					alert( 'Data successfully loaded: "' + storageKey.value + ': ' + storageValue.value + '"' );
				} else {
					alert( "Please enter storage KEY item" );
				}
			}

			window.onload = function() {

				loadData();

				window.onstorage = function( e ) {

					var params = ["key","oldValue","newValue","url","storageArea"];

					var k, s = "";
					while( k = params.shift() ) {
						s += "<b>" + k + "</b>: " + e[ k ] + "<br/>";
					}
					var div = document.createElement('div');
					div.innerHTML = s;
					document.body.appendChild( div );
				}
			}
		</script>
    </head>
    <body>
		Enter KEY for store storage: <input id="storageKey" type="text" value="testKey" /><br />
		Enter Value for current KEY: <input id="storageValue" type="text" value="" /><br />
		<button onclick="saveData();">Store entered data</button>
		<button onclick="loadData();">Load from storage</button>
		<button onclick="localStorage.clear();">Clear storage</button>
    </body>
</html>
Скачать можно на GitHub: https://github.com/devote/localstorage

beard 11.06.2012 12:07

стерто

devote 11.06.2012 13:58

Цитата:

Сообщение от beard
стерто

ты о чем?

Deff 11.06.2012 14:46

devote,
:dance: класс - Всё работает при перезагрузки страницы - выключении компа и даж при очистке Кеша

devote 11.06.2012 15:02

тока что обновил версию, баг нашел небольшой... исправил его.

Deff 11.06.2012 15:38

Цитата:

Сообщение от devote
тока что обновил версию

Опробовал

zebra 11.06.2012 18:27

А можно объяснить где оно хранит данные?

beard 11.06.2012 19:24

Цитата:

Сообщение от zebra
А можно объяснить где оно хранит данные?

да, опиши пожалуйста вкратце что происходит и как работает. Чтобы не разгребать. Был бы очень благодарен.

devote 11.06.2012 19:50

Цитата:

Сообщение от zebra
А можно объяснить где оно хранит данные?

хранятся данные у пользователя в компе

Цитата:

Сообщение от beard
да, опиши пожалуйста вкратце что происходит и как работает. Чтобы не разгребать. Был бы очень благодарен.

Особо заумного ничего не происходит, у IE давно существует localStorage но он имеет свои недостатки, которые я попытался обойти в данной реализации.

А недостатки таковы.

У IE существуют behavior'ы которые давно работают начиная с IE5+ и в этих behavior'сах есть тот самый localStorage, но он ограничен тем что записывает и хранит данные не на домен а на текущий путь указанный в адресной строке, тоесть на текущую папку правильнее сказать. Если сохранить данные находясь по адресу http://somesite.com/ то они не будут доступны по адресу http://somesite.com/folder/ то есть в иной папке. Именно эту проблему я и попытался обойти в данной реализации.

Что бы понять подробнее как это работает, в идеале конечно почитать код и понять как, но вкратце я все же скажу что реализация использует iframe и в него загружает главную страницу сайта, блокируя выполнения скриптов, загрузку ресурсов и т.д. То-есть ваша главная страница во фрейме лежит пустая, и имеет лишь небольшую часть javascript кода, который просто сохраняет данные все время в одной и той же папке. От этого и получается нужный нам эффект.

Надеюсь понятно изложил суть.

beard 11.06.2012 19:59

devote, да, понятно, спасибо

интересная тема выходит

как я понимаю эти behavior'ры нельзя никак очистить браузером, или обнулить. Т.е. получается хранилище оn которого пользователь не может избавится как от куков или локалсторадж?

Есть ли идеи как сделать подобное для всех остальных браузеров?:)

devote 11.06.2012 20:00

Цитата:

Сообщение от beard
Есть ли идеи как сделать подобное для всех остальных браузеров?

ну насчет этого боюсь вряд ли что могу сказать.

Deff 11.06.2012 20:10

Цитата:

Сообщение от devote
блокируя выполнения скриптов, загрузку ресурсов и т.д. То-есть ваша главная страница во фрейме лежит пустая,

Есть чуть шустрее метод (хотя с точки зрения HTML не сильно валидизирован, но работает везде, аналогично тегу center
(хотя скрипто вставки в контент, тем паче во фрейме вряд ли валидизируюца => http://htmlbook.ru/html/plaintext

devote 11.06.2012 20:10

Цитата:

Сообщение от Deff
Есть чуть шустрее метод(правд не валиден в iframe, хотя имхо вродь скрипто установки во фрейме не валидизированы => http://htmlbook.ru/html/plaintext

Я использовал тег <noscript> он вообще вырезает все что идет за ним. То-есть в нашем случае, даже текст не будет отображаться. То-есть пустая страница. Поэтому все же <noscript> думаю будет куда быстрее, так как все что в нем тупо игнорируется.

Deff 11.06.2012 20:14

devote, ... мну сказал свой опыт - ксать мон потестировать запустив с 10 фреймов с тем и с другим
Да -Вспомнил - В опере <noscript> не работает до 11 версии, - потому и делал через plaintext

Но вроде к данной задачке это не относиться

Deff 11.06.2012 21:40

Цитата:

Сообщение от devote
ну насчет этого боюсь вряд ли что могу сказать.

Вроде тестил lacalStorage в Мозилле и Опере, аналогично данному Варианту не стирает при удалении куков и кэша(Хром по-моему тоже тестировал, но не помню точно

devote 11.06.2012 23:26

переписал к чертям библу, весит терь мало. Просто не реально мало :)

Deff 11.06.2012 23:31

Цитата:

Сообщение от devote
переписал: библу

У мну в ИЕ перестала фунциклить...
Ошибочка при тестировании

devote 11.06.2012 23:32

Цитата:

Сообщение от Deff
cray: У мну в ИЕ перестала фунциклить...

может библа прокешировалась старая? и из-за этого хрен? И да я там ключ сменил, поэтому старые данные вряд ли уже увидишь :)

Deff 11.06.2012 23:37

Цитата:

Сообщение от devote
может библа прокешировалась старая?

Повторил Операцию, закрыл брауз - очистил КЭШ - Включил -(после ввода во второе окно) после нажатия кнопок лоад и Store - null
ИЕ7 XP

devote 11.06.2012 23:38

Deff,
странно, у меня пахает на ура.. ты хоть ввел что нить перед тем как жмакнуть Store ?

devote 11.06.2012 23:42

Цитата:

Сообщение от Deff
Всё как в прошлый раз делал вводил ффффффффффффффффф

хм.. ввел также ффффффффффффф и фсе норм.. ты у меня на сайте смотришь или локально?

devote 11.06.2012 23:45

Deff,
если можешь продебаж а? ты же вкурсе как это делать.. просто я не могу добиться ошибки, у мну все норм пашет.

Deff 11.06.2012 23:46

http://video.yandex.ru/users/hostjs-mybb2011/view/14/

Цитата:

Сообщение от devote
если можешь продебаж а?

У мну нет опыта в ИЕ7, всё в Опере фиксю

devote 11.06.2012 23:49

Deff,
ты не в том порядке делаешь, надо наоборот, ввести что-то... нажать Store , load не нужно нажимать... ты же нажимаешь load и загружаешь null обратно.

Deff 11.06.2012 23:53

Цитата:

Сообщение от devote
ты не в том порядке делаешь, надо наоборот, ввести что-то... нажать Store , load не нужно нажимать... ты же нажимаешь load и загружаешь null обратно.

:dance: Да - Всё в Норме (Соррь
Но прошлый скрипт именно в таком порядке вроде делал

devote 11.06.2012 23:54

Цитата:

Сообщение от Deff
Но прошлый скрипт именно в таком порядке вроде делал

да нет, так же было.. :) ну главное работает)

Deff 12.06.2012 00:33

devote,


:thanks: http://hostjs-mybb2011.narod.ru/devote_localStorage.htm

В конце страницы, пашет во всех браузах... т.е мон ставить кроссдоменно-кроссбраузерную авторизацию
Если объединить флешкой( eю передавать ключ (возможно и с cолью) ... а данные считывать из LocalStorage

http://samy.pl/evercookie/evercookie.js => this.evercookie_lso = function(name, value)

devote 12.07.2012 16:06

Добавил событие window.onstorage и перекинул скрипт на GitHub, читайте первый топик.

FINoM 21.07.2012 16:42

Если я не ошибаюсь, хранилище в ишаках работает подобно .htaccess: если сохранить данные на example.com/a/, они не будут видны в example.com/b/. Могу ошибаться.

devote 21.07.2012 16:59

Цитата:

Сообщение от FINoM
Если я не ошибаюсь

не ошибаешься, но в библиотеке это преодолено.

Deff 21.07.2012 17:52

Вообще вещь шикарная для ликвидации повторных аякс запросов на разных страницах того же контента актуального по времени( время и ссылку подкачки подсовываем в ключ)

В частности - многостранично отображаемый чат, или новостной блок

Deff 28.01.2013 08:15

Смотрел на хабре - много вопросов по расширению объема localStorage более 5 мегов, как вариант, использовать в качестве дополнительного Storage фрейм запроксенный через гугло переводчик + текущий адрес или иной анонимайзер - или несколько.

kobezzza 28.01.2013 09:32

Цитата:

Сообщение от Deff (Сообщение 229851)
Смотрел на хабре - много вопросов по расширению объема localStorage более 5 мегов, как вариант, использовать в качестве дополнительного Storage фрейм запроксенный через гугло переводчик + текущий адрес или иной анонимайзер - или несколько.

В последних ИЕ, хром и фф уже нормально работает IndexedDB, а в Opera есть WebSQL, они позволяют хранить большие данные, а ограничения вроде не более 50 мб на один блоб.

Deff 28.01.2013 17:00

:) Имхо, я к тому, что если есть время - можно бы расширить дополнить ?
a) Прозрачная работа с объектами (Просто берем и сохраняем переменную
b) Расширение объёма хранения (благо работа с фреймами уже в наличии)

Конкурент => https://github.com/marcuswestin/store.js

Deff 10.04.2013 14:06

devote,
Собственно вопрос такой :
нельзя ли Эту часть
if ( window.location.hash == "#localStorageDataStoredPage" ) {

			document.write( '<link id="StorageElement" style="behavior:url(#default#userData)" />'+
				'<script type="text/javascript">'+
					'var r=[],_S=document.getElementById("StorageElement");'+
					'for(var k in window){'+
						'if(k!="r"&&k!="_S"){'+
							'r[r.length]=k;'+
						'}'+
					'}'+
					'window.onerror=function(){'+
						'return true;'+
					'};'+
					'window.onload=function(){'+
						'_S.document.body.innerHTML="";'+
					'}'+
				'</script>'+
				'<script type="text/javascript">'+
					'eval("var "+r.join("=null,")+"=null,prompt=null,alert=null,r=null;")'+
				'</script><body><noscript><noscript><noscript><noscript><plaintext><![CDATA['
			);

			return;
		}

Всунуть в пустой фрейм, (у меня, на http://test083tst.mybb.ru/ в марте появилась проблема, - установленные скрипты от сервиса стали конфликтовать с данным скриптом, поскольку переносятся и во фрейм, выше него
(это по всему сервису mybb.ru- данный тестовик как пример),
Скрипт был достаточно важный - сохранял статистику активности по юзерам за сутки(которую сервис изъял в связи с нагрузкой
...
Цитата:

Всунуть в пустой фрейм,
Или по ссылке со страницей 404, где она почти пустая и без скриптов,
Или во фрейм со ссылкой на мини-картинку http://test083tst.mybb.ru/files/0011/da/9b/85646.png, он вверху страницы (плюсик)
Т.е скрипты устанавливать во фрейм с родительской ... ?

devote 10.04.2013 15:12

да можно будет переделать его.. тока вот вопрос а стоит ли? ведь ИЕ7 скоро будет в страшных снах, стоит ли ради него стараться?

Deff 10.04.2013 15:17

Цитата:

Сообщение от devote
да можно будет переделать его.. тока вот вопрос а стоит ли? ведь ИЕ7 скоро будет в страшных снах, стоит ли ради него стараться?

Ну ежели на пустой фрейм то даже интересно,
А на счет стоит - судя по громким крикам у мну на сервисе 7%( в основном за 50) сидят на ИЕ6-7 при 400 000 форумах это прилично
(хотя скриптом из них кнешн пользуются не более %10

Deff 10.04.2013 15:26

Чичас просто хотел расширить применение и подгружать контент объявления(онлайн редактируемого) с LocalStorage, а отсутствие объявы даж у 7% - не Айс
За чрезмерное использование аякс запросов же - сервис банит пользователя - принимают за DDOs - атаку
[hr]
Думаю тогда лучше через фрейм с картинкой, поскольку многократное обращение к картинке не принимают за DDOs ?
(Или есть возможность на пустом ?

Deff 16.04.2013 05:39

:cray:

Deff 17.04.2013 23:53

Ибо актуально, задумал перенести форму ответа на клиента( более 20 кб, поскольку смайлы и загрузка катинок флеш скриптом


Часовой пояс GMT +3, время: 08:13.