Различия в Internet Explorer и Firefox при динамичной загрузке содержания, затем продвигающегося и назад

Я разрабатываю веб-приложение, где, должный замедлить доступ к базе данных, не все содержание на странице загружается сразу, а скорее динамично когда пользователь нажимает кнопку после дополнительного делания выбора.

Это хорошо работает. Однако после динамичной загрузки содержания, если я перешел к другой веб-странице, затем перешли назад, в Internet Explorer исчезнет загруженное содержание, т.е. страница вернется к первоначально полученной странице. В Firefox (и Opera также), однако, загруженное содержание все еще будет там, т.е. страница будет похожа на него, сделал, прежде чем я перешел далеко от него.

Поведение Firefox является желаемым поведением в моем случае, поскольку пользователь обычно перешел бы к подстраницам и возвращался бы к основной странице. Мой вопрос поэтому, есть ли какой-либо способ, которым я могу вынудить Internet Explorer показать это поведение или являюсь там какими-либо возможными обходными решениями для получения желаемого результата?

6
задан Peter Mortensen 14 January 2010 в 11:44
поделиться

3 ответа

Посмотрите на набор _ error _ handler () и включите его в начало сценариев или в bootstrap, чтобы просто напечатать трассировку стека, когда E_WARNINGs произойдут.

function stacktrace_error_handler($errno,$message,$file,$line,$context)
{
    if($errno === E_WARNING) {
        debug_print_backtrace();
    }
    return false; // to execute the regular error handler
}
set_error_handler("stacktrace_error_handler");

Для улучшения контроля над различными типами, посмотрите на более явную версию, размещенную в других ответах.

-121--1888577-

Когда вы запрашиваете предложение о том, как обращаться с исключениями...

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

  • Исключения не являются ограничением низкого уровня, с которым необходимо иметь дело до тех пор, пока компилятор не станет достаточно интеллектуальным.
  • Исключения представляют собой высокоуровневую языковую конструкцию, используемую для выражения семантического "что-то исключительное произошло, чье обращение не нужно смешивать с обычным кодом; вы предпочитаете, чтобы он был обработан в определенных кодах ".

Исключения существуют в двух формах:

  • Отмеченные исключения должны быть явными в каждом методе, который может их выдать.
  • Непроверенные исключения (подклассы RuntureException или Error) обычно неявны.

На каждом уровне кода (метод или блок) код должен выбирать, что делать в случае любого исключения (за исключением неконтролируемых исключений, которые могут полностью исключить обработку). Это выбор ответственности, который варьируется, нет решения, действительного для всех случаев:

  • PROCESS : Поймать его и полностью обработать (коды вызова обычно не знают что-то произошло). Нынешний метод должен нести ответственность. Регистрация трассировки стека для разработчика может оказаться полезной.
  • STEP : Зафиксируйте его, выполните шаг обработки, связанный с локальным кодом, и повторно выполните его (или повторно выполните другое исключение с исходным в качестве причины).
  • IGNORE : просто примите его к ответственности вызывающего кода.

Язык java позволяет вам иметь определенные синтаксисы, облегчающие обработку исключений, например, улов конкретных исключений, следовавших за более общими...


Обычно вы учитываете исключения в своей архитектуре и принимаете некоторые конструктивные решения. Некоторые примеры (смешанные уникальными способами):

  • выбирают один уровень обработки всех исключений, выброшенных в нижних уровнях (например, транзакционные услуги): ведение журнала для разработчика, позиционирование некоторой глобальной информации для пользователя...
  • Разрешите некоторым исключениям выполнять несколько вызовов метода до тех пор, пока вы не получите код, в котором его можно обработать (например, в зависимости от исключений вы можете повторить полную операцию или уведомить пользователя...)
  • и т.д.
-121--4817897-

Вот мое обходное решение для IE. Он использует тот факт, что, даже если DOM сбрасывается при переходе от страницы к странице и обратно, значения полей ввода по-прежнему запоминаются.

Для каждого динамически загружаемого элемента у меня также есть скрытое поле ввода, где я «кэширую» загруженное значение. Затем у меня есть функция transferStartCache (), которая копирует значения из каждого скрытого поля ввода в соответствующий элемент.Эта функция выполняется при инициализации страницы, которая в случае IE находится при загрузке страницы И каждый раз при переходе обратно на страницу.

Этот метод, вероятно, можно использовать и для хранения значений переменных javascript.

3
ответ дан 17 December 2019 в 00:09
поделиться

Я нашел немного другой способ сделать это . Таким образом, даст вам местоположение различных системных папок и использует реальные слова вместо CLSID.

import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserDocs = objShell.SpecialFolders("AllUsersDesktop")
print allUserDocs

Другие доступные папки: AllusersDesktop, Allusersstartmenu, AllusersPrograms, Allusersstartup, Рабочий стол, Фавориты, Шрифты, МИДОЦМЕНТЫ, NETHOOD, Принт, Недавние, Отправка, SendMo, Startmenu, Startup & Templates

-121--3286769-

Я не думаю, что есть метод, чтобы получить IE для эмуляции FF таким образом. Причина связана с довольно фундаментальными аспектами браузеров. FF использует механизм для его истории страницы, называемой «быстрым кэшированием DOM», которая (от моего ограниченного понимания) в основном означает, что, когда он ставит страницу в историю браузера, то она будет хранить текущую DOM (то текущее состояние страницы) в сериализованном Формат, что означает, что, когда страница перезагружается из истории, состояние сохраняется, а FF может сделать это гораздо быстрее, так как много работы уже сделано (разбор HTML в DOM и т. Д.). По сравнению, т. Е. Просто будет хранить HTML, полученное изначально, как это файл истории и перезагрузится его при навигации по истории.

2
ответ дан 17 December 2019 в 00:09
поделиться

От Наследование присоединенной таблицы :

В наследовании присоединенной таблицы каждый совместно использует данные из корневой таблицы. Кроме того, каждый подкласс определяет собственная таблица, добавляющая расширенную состояние. В следующем примере показаны два таблицы, ПРОЕКТ и L_PROJECT, а также как два класса, Проект и LargeProject:

...

Столбец дискриминатора определяет тип и, следовательно, объединенную таблицу для использования, поэтому в родительской таблице необходим столбец дискриминатора.

-121--4076939-

Я обнаружил несколько другой способ его выполнения . Этот способ даст вам расположение различных системных папок и использует реальные слова вместо CLSID.

import win32com.client
objShell = win32com.client.Dispatch("WScript.Shell")
allUserDocs = objShell.SpecialFolders("AllUsersDesktop")
print allUserDocs

Другие доступные папки: AllUsersDesktop, AllUsersStartMenu, AllUsersPrograms, AllUsersStartup, Desktop, Favorites, Шрифты, MyDocuments, NetHood, PrintHood, Recent, SendTo, StartMenu, Startup & Templates

-121--3286769-

Вот статья о сохранении состояния в переменных сеанса , которая может помочь

2
ответ дан 17 December 2019 в 00:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: