Перенаправление на URL-адрес, IE 8 игнорирует фрагмент

У меня есть проект MVC 3, который активно использует фрагменты для динамической загрузки контента для разных страниц. Есть страницы, которые отправляются обратно в контроллер для загрузки файла. После завершения загрузки я хочу перенаправить пользователя обратно на страницу, с которой он пришел. У меня есть обратный URL-адрес, переданный действию загрузки, а затем перенаправление пользователя обратно на эту страницу после завершения загрузки.

Это правильно работает в Chrome и Firefox, но IE игнорирует фрагмент, и я возвращаюсь к корневой странице в своем решении. Ниже приведен код, который я использую для перенаправления пользователя.

public virtual ActionResult UploadFile(string returnURL)
{
    // Do some work here...
    return Redirect(returnURL);
}

Есть ли способ заставить IE 8 сохранить фрагмент и вести себя как Chrome и Firefox?

Если нет, есть ли стандартный способ обойти эту проблему?

Я также просмотрел статью Эрика Ло статья о переадресации и фрагментах https. Он дает некоторое представление о том, как фрагменты обрабатываются разными браузерами.


person John Koerner    schedule 11.07.2012    source источник
comment
(1) когда вас перенаправляют обратно, содержит ли URL-адрес в адресной строке IE ваш фрагмент, и (2) можете ли вы показать клиентский код, который использует фрагменты для навигации?   -  person Serg Rogovtsev    schedule 26.07.2012
comment
(1) Нет, IE не показывает фрагмент в URL-адресе после перенаправления. (2) Код на стороне клиента, похоже, не имеет значения. Если я перенаправляюсь на URL-адрес stackoverflow с фрагментом в нем, IE удаляет фрагмент, но Chrome и Firefox сохраняют его.   -  person John Koerner    schedule 26.07.2012


Ответы (2)


Вы можете быть в ручье на этом. Фрагмент URL-адреса не считается важным для уникальности URL-адреса, например, при принятии решения о добавлении страницы в кеш браузера или добавлении URL-адреса в историю навигации браузера.

URL-запрос включен в классификацию уникальности URL, а фрагмент — нет.

Возможно, IE8 перенаправляет на URL-адрес с фрагментом, но загружает корневую страницу (без фрагмента) из кеша браузера, потому что этот фрагмент не имеет значения для проверки эквивалентности кеша URL-адреса.

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

person dthorpe    schedule 11.07.2012
comment
К сожалению, настройка без кеша не повлияла на поведение. - person John Koerner; 11.07.2012

Я создал небольшое приложение, чтобы воспроизвести его. Он работал, как и ожидалось, в IE9 и Chrome.

У меня есть два предложения для вас:

  • Если это проблема кэширования, может помочь добавление метки времени в URL. Попробуйте создать такой URL:

http://localhost:50173/Sample/?timestamp=26.07.2012%2021:11:00#myLocation

  • Если это не работает, обходной путь может состоять в том, чтобы отобразить javascript в конце, который будет перемещаться:

window.location = window.location + "#myLocation";

person George Mamaladze    schedule 26.07.2012
comment
Я согласен, что IE9 и Chrome работают, к сожалению, мне приходится иметь дело с IE 8, в котором, похоже, есть проблема. Я не могу жестко закодировать фрагмент в своем js, поскольку он динамический в зависимости от страницы, которую пытался открыть пользователь. Пример использования: пользователь перешел по URL-адресу, но время сеанса истекло, и ему необходимо повторно войти в систему. После повторного входа в систему я хочу вернуть их на страницу, на которой они были. - person John Koerner; 26.07.2012