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 |
стерто
|
Цитата:
|
|
тока что обновил версию, баг нашел небольшой... исправил его.
|
Цитата:
|
А можно объяснить где оно хранит данные?
|
Цитата:
|
Цитата:
Цитата:
А недостатки таковы. У IE существуют behavior'ы которые давно работают начиная с IE5+ и в этих behavior'сах есть тот самый localStorage, но он ограничен тем что записывает и хранит данные не на домен а на текущий путь указанный в адресной строке, тоесть на текущую папку правильнее сказать. Если сохранить данные находясь по адресу http://somesite.com/ то они не будут доступны по адресу http://somesite.com/folder/ то есть в иной папке. Именно эту проблему я и попытался обойти в данной реализации. Что бы понять подробнее как это работает, в идеале конечно почитать код и понять как, но вкратце я все же скажу что реализация использует iframe и в него загружает главную страницу сайта, блокируя выполнения скриптов, загрузку ресурсов и т.д. То-есть ваша главная страница во фрейме лежит пустая, и имеет лишь небольшую часть javascript кода, который просто сохраняет данные все время в одной и той же папке. От этого и получается нужный нам эффект. Надеюсь понятно изложил суть. |
devote, да, понятно, спасибо
интересная тема выходит как я понимаю эти behavior'ры нельзя никак очистить браузером, или обнулить. Т.е. получается хранилище оn которого пользователь не может избавится как от куков или локалсторадж? Есть ли идеи как сделать подобное для всех остальных браузеров?:) |
Цитата:
|
Цитата:
(хотя скрипто вставки в контент, тем паче во фрейме вряд ли валидизируюца => http://htmlbook.ru/html/plaintext |
Цитата:
|
devote, ... мну сказал свой опыт - ксать мон потестировать запустив с 10 фреймов с тем и с другим
Да -Вспомнил - В опере <noscript> не работает до 11 версии, - потому и делал через plaintext Но вроде к данной задачке это не относиться |
Цитата:
|
переписал к чертям библу, весит терь мало. Просто не реально мало :)
|
Цитата:
Ошибочка при тестировании |
Цитата:
|
Цитата:
ИЕ7 XP |
Deff,
странно, у меня пахает на ура.. ты хоть ввел что нить перед тем как жмакнуть Store ? |
Цитата:
|
Deff,
если можешь продебаж а? ты же вкурсе как это делать.. просто я не могу добиться ошибки, у мну все норм пашет. |
http://video.yandex.ru/users/hostjs-mybb2011/view/14/
Цитата:
|
Deff,
ты не в том порядке делаешь, надо наоборот, ввести что-то... нажать Store , load не нужно нажимать... ты же нажимаешь load и загружаешь null обратно. |
Цитата:
Но прошлый скрипт именно в таком порядке вроде делал |
Цитата:
|
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) |
Добавил событие window.onstorage и перекинул скрипт на GitHub, читайте первый топик.
|
Если я не ошибаюсь, хранилище в ишаках работает подобно .htaccess: если сохранить данные на example.com/a/, они не будут видны в example.com/b/. Могу ошибаться.
|
Цитата:
|
Вообще вещь шикарная для ликвидации повторных аякс запросов на разных страницах того же контента актуального по времени( время и ссылку подкачки подсовываем в ключ)
В частности - многостранично отображаемый чат, или новостной блок |
Смотрел на хабре - много вопросов по расширению объема localStorage более 5 мегов, как вариант, использовать в качестве дополнительного Storage фрейм запроксенный через гугло переводчик + текущий адрес или иной анонимайзер - или несколько.
|
Цитата:
|
:) Имхо, я к тому, что если есть время - можно бы расширить дополнить ?
a) Прозрачная работа с объектами (Просто берем и сохраняем переменную b) Расширение объёма хранения (благо работа с фреймами уже в наличии) Конкурент => https://github.com/marcuswestin/store.js |
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- данный тестовик как пример), Скрипт был достаточно важный - сохранял статистику активности по юзерам за сутки(которую сервис изъял в связи с нагрузкой ... Цитата:
Или во фрейм со ссылкой на мини-картинку http://test083tst.mybb.ru/files/0011/da/9b/85646.png, он вверху страницы (плюсик) Т.е скрипты устанавливать во фрейм с родительской ... ? |
да можно будет переделать его.. тока вот вопрос а стоит ли? ведь ИЕ7 скоро будет в страшных снах, стоит ли ради него стараться?
|
Цитата:
А на счет стоит - судя по громким крикам у мну на сервисе 7%( в основном за 50) сидят на ИЕ6-7 при 400 000 форумах это прилично (хотя скриптом из них кнешн пользуются не более %10 |
Чичас просто хотел расширить применение и подгружать контент объявления(онлайн редактируемого) с LocalStorage, а отсутствие объявы даж у 7% - не Айс
За чрезмерное использование аякс запросов же - сервис банит пользователя - принимают за DDOs - атаку [hr] Думаю тогда лучше через фрейм с картинкой, поскольку многократное обращение к картинке не принимают за DDOs ? (Или есть возможность на пустом ? |
:cray:
|
Ибо актуально, задумал перенести форму ответа на клиента( более 20 кб, поскольку смайлы и загрузка катинок флеш скриптом
|
Часовой пояс GMT +3, время: 08:13. |