Для ответа на вопрос рассмотрите этот вопрос: что будет ниже кода, распечатывают, когда эти Child
объект инстанцируют?
class Parent
{
public Parent()
{
DoSomething();
}
protected virtual void DoSomething()
{
}
}
class Child : Parent
{
private string foo;
public Child()
{
foo = "HELLO";
}
protected override void DoSomething()
{
Console.WriteLine(foo.ToLower()); //NullReferenceException!?!
}
}
ответ - то, что на самом деле NullReferenceException
будет брошен, потому что foo
является пустым. основного конструктора объекта вызывают перед его собственным конструктором . При наличии virtual
вызов в конструкторе объекта Вы представляете возможность, что наследование объектов выполнит код, прежде чем они были полностью инициализированы.
Один ответ: среди прочего, события выгрузки приводят к тому, что кеш обратного / прямого перехода становится недействительным .
Некоторые браузеры сохраняют текущее состояние всей веб-страницы в так называемый «bfcache» или «страничный кеш». Это позволяет им очень быстро повторно отображать страницу при навигации с помощью кнопок «назад» и «вперед» и сохраняет состояние модели DOM и всех переменных JavaScript. Однако, когда страница содержит события onunload, эти события могут потенциально перевести страницу в нефункциональное состояние, поэтому страница не сохраняется в bfcache и должна быть перезагружена (но может быть загружена из стандартного кеша) и повторно загружена. рендеринг с нуля, включая запуск всех обработчиков загрузки. При возврате на страницу через bfcache DOM сохраняется в своем предыдущем состоянии, без необходимости запускать обработчики onload (поскольку страница уже загружена).
Обратите внимание, что поведение bfcache отличается от стандартного кеша браузера в отношении Cache-Control и других заголовков HTTP. Во многих случаях браузеры будут кэшировать страницу в bfcache, даже если в противном случае он не сохранил бы ее в стандартном кеше.
jQuery автоматически прикрепляет событие выгрузки к окну, поэтому, к сожалению, использование jQuery не позволяет сохранить вашу страницу в bfcache для сохранения DOM и быстрого перехода назад / вперед . [Обновление: это было исправлено в jQuery 1.4, поэтому оно применимо только к IE]
Facebook запоминает состояние страницы, изменяя хэш-идентификатор в URL-адресе для запросов ajax. Эти изменения записываются в историю браузера, поэтому, когда пользователь нажимает кнопку «Назад», хеш изменяется на то, что было раньше. Таким образом, подразумевается, что вам понадобится некоторый Javascript для отслеживания идентификатора has и реакции на его изменение браузером. Андреас Бликст имеет доступный скрипт мониторинга хэшей .
Использование идентификатора хэша / фрагмента URL-адреса - довольно распространенный способ перехвата / запоминания состояния в веб-приложении, которое использует обновления Ajax и DOM.
Ознакомьтесь с Really Simple История проекта на несколько идей. Можно отслеживать URL-адрес на предмет изменений хэша, и rsh делает это с учетом различий в браузерах.
То, что вы ищете, - это какой-то тип управления хешем URL. # В URL-адресе предназначен только для клиентской стороны.
Когда вы меняете состояние задней панели с помощью JS, вы обновляете данные в # URL-адреса.
Также вы добавляете какой-то тип опроса, который отслеживает, изменился ли хэш, и загружает состояние страница на основе новых данных в хэше.
Взгляните на это:
Это не имеет ничего общего с символом решетки (#).
Если вы проверите заголовки HTTP Apple, это просто кэширование страницы.