Может ли JavaScript выдержать полный обход HTTP-запроса?
Возможно ли, чтобы JavaScript (в частности, переменные JavaScript и их содержимое) выдерживал полные HTTP-запросы? Я хотел бы "кэшировать" / сохранять информацию на стороне клиента при изменении страницы, без необходимости использовать скрытые поля формы или что-либо связанное с HTML вообще.
Это возможно?
Изменить: Позвольте мне добавить вариант использования для того, что я имею в виду.
- Допустим, у меня есть массив JavaScript с именем arrayOfPersons, который я загрузил как часть page /HomePage, и теперь он содержит 1000 объектов на стороне клиента.
- Теперь пользователь переключает страницу и загружает совершенно новую страницу /MyAccount в браузер
- Моя цель: все еще иметь массив arrayOfPersons, который я загрузил на страницу / HomePage, доступную после того, как пользователь запросил совершенно новую страницу /MyAccount.
Надеюсь, это проясняет, что я имею в виду. Спасибо!
7 ответов
Чтобы добавить ответ Ника, разные браузеры поддерживают идею постоянного хранения в той или иной форме. За последний год было предпринято множество попыток нормализовать их для всех браузеров.
Вот одна библиотека, которая охватывает HTML 5 DOM Storage, Microsoft UserData
, Сеансовые файлы cookie и window.name
(используя сериализацию JSON как window.name can
хранить только строки).
Вот еще один, который фокусируется на window.name
только (что на самом деле работает в Opera 9+, IE6+, Firefox 1.5+, Safari [3, я думаю).
Вот плагин jQuery, который использует .swf
(flash) файл, обеспечивающий наибольшую межбраузерную поддержку (хотя он поддерживает нативные решения, если вы настроите его для этого). Я не могу ручаться за это, но это должно быть упомянуто для этого сообщества jQuery-lovin.
Да, это возможно. Это своего рода хак, который я использовал для поддержания состояния страницы (на стороне клиента) на протяжении всего сеанса.
Иметь базовую страницу (например, master), которая никогда не обновляется в течение сеанса, и в ней есть только iframe. И все ваши страницы приложения будут загружены в этот кадр..
Сохраните информацию о своем состоянии на этой главной странице как объекты JS. И вы можете получить доступ к объектам javacript главной страницы (родительской) со своей дочерней страницы в iframe. И это будет поддерживаться через сеанс на стороне клиента.
Это самый простой способ. И это работает довольно аккуратно.
Новые браузеры поддерживают хранилище DOM, которое позволяет хранить произвольные данные, которые могут сохраняться между страницами. Вы также можете использовать скрытое приложение Flash, чтобы запомнить вещи. Существуют библиотеки, такие как Dojo Storage, которые обрабатывают обнаружение для вас, поэтому вы просто сохраняете свои данные, и они будут использовать все, что доступно.
Он не будет автоматически сохранять все ваши переменные Javascript для следующей страницы - вам нужно будет добавить обработчик onunload для хранения того, что вы хотите, когда пользователь покидает страницу.
Нашел полезный
Инфраструктура JSOC представляет собой подключаемую расширяемую инфраструктуру кэширования на стороне клиента для JavaScript.
JSOC предлагает веб-разработчикам простой способ выполнения обычных методов кэширования (добавления, замены, удаления, очистки и т. Д.) В любом браузере с поддержкой JavaScript.
Поскольку JSOC является автономным модулем JavaScript, для включения JSOC в проект веб-разработки необходимо включить ссылку на скрипт и работать с распространенными методами кэширования. Низкоуровневые методы содержатся в модуле JSOC JavaScript, поэтому разработчики могут сосредоточиться на задаче веб-разработки.
Если я вас правильно понимаю, все, что вам нужно, это добавить свои собственные функции кэширования в onSubmit всех форм и onClick всех ссылок, например:
var cachedpages;
$("A").onclick(function(){
url = $(this).attr('href'); // maybe hash?
if (cachedpages[url]) {
// replacing all html
} else {
$.get(url, function(data){
cachedpages[url] = data;
// replacing all html
});
}
return false;
});
Одна возможность состоит в том, чтобы использовать набор фреймов и хранить там объекты, другая - для их сериализации и сохранения данных с помощью любого из
window.name
document.cookie
location.search
document.cookie
является каноническим способом хранения данных между вызовами страниц в одном домене и предоставляет механизмы для управления доступом и временем жизни.
Если вы используете window.name
данные сохраняются в течение всего срока действия экземпляра браузера.
С помощью window.location
является более сложным, и вы должны явно изменить ссылки для отправки данных (что можно легко сделать с помощью делегирования события).
Набор фреймов даст вам место для сохранения вашего JavaScript, но при полной загрузке страницы... Я думаю, что нет.
Файлы cookie также могут быть полезны для "сохранения" данных, но это не то, что вы просили.