Приложение Silverlight исчезает при обновлении страницы в IE10
ОБНОВЛЕНИЕ. Обход проблемы. Чтобы заставить IE10 включить режим совместимости, включите один из следующих метатегов:
<meta http-equiv="x-ua-compatible" content="IE=7" />
<meta http-equiv="x-ua-compatible" content="IE=8" />
Это не идеальное решение по разным причинам, но, по крайней мере, оно устраняет проблему.
ОРИГИНАЛЬНЫЙ ВОПРОС:
Я понял пару месяцев назад, что проблема с нашим приложением Silverlight в IE10 в Windows 8 (я не пробовал предварительный просмотр IE10 для Windows 7). Когда страница asp.net, на которой размещается наше приложение SL, загружает все, что работает, и приложение загружается как ожидалось. Если я немедленно обновляю страницу, она также перезагружается, как и ожидалось. Но: Если я сосредоточусь на приложении Silverlight, щелкнув его, а THEN ударил F5, он просто исчезнет. Это похоже на то, что плагин полностью исчезает. Если я отслеживаю запросы с помощью Fiddler, я вижу, что для xap файла не выдается запрос. Я надеялся, что это будет исправлено в выпуске исправления для IE10, но пока ничего не изменилось. Я не могу найти какую-либо информацию об этом, когда я пытаюсь использовать его. Мне кажется маловероятным, что я должен быть первым, кто его обнаружил, и я очень удивлен, что не нахожу больше информации. Чтобы воспроизвести проблему:
- Создайте новое приложение Silverlight
- Добавьте какой-то контент в MainPage.xaml, например кнопку или другое.
- Запустите приложение в IE10 (на Win8)
- Щелкните в любом месте приложения Silverlight. Это просто для фокусировки плагина.
- Обновить страницу (F5)
- Результат: приложение Silverlight не загружается, а страница пуста.
Несколько наблюдений:
- После описанных выше шагов обновление не вернет приложение.
- После описанных выше шагов, если я повторно введу url в адресную строку и нажмите Enter, приложение загрузится так, как ожидалось.
- Если я включу представление совместимости в IE, приложение также загрузится, как ожидалось. Ничто из этого не приведет к воспроизведению ошибки при включении режима совместимости.
Теперь на мои вопросы:
- Кто-нибудь еще заметил это поведение?
- Если да, нашли ли вы обходное решение?
Ответы
Ответ 1
Я вижу ту же проблему с моим приложением Silverlight в IE 10.
Я попытался добавить метатег совместимости IE 8, предложенный выше, но это не решает проблему последовательно. Кажется, что он работает только периодически, после того как говорят каждую 5-ю попытку обновления?!
Единственный способ, с помощью которого я могу работать, это заставить режим браузера "видеть совместимость с IE 10", и я не думаю, что это можно сделать через содержимое страницы (метатег и т.д.)? Мне пришлось удалить метатег совместимости IE 8, чтобы кнопка "Совместимость" была доступна в адресной строке, а затем попросила пользователей нажать кнопку совместимости, которая затем запоминается для сайта. Это приводит к тому, что браузер переходит в режим браузера: "Просмотр сокетов IE 10" и "Режим документа": "Стандарты IE7". Поведение обновления затем работает последовательно, как и ожидалось, и как оно привыкло.
Это большая проблема для нас. Мы создали наше приложение Silverlight, чтобы кнопка обновления браузера использовалась для обновления страниц/контента в приложении (пользователи остаются в системе и т.д.). Очень плохо, что мы должны попросить пользователей установить наш сайт для работы в режиме совместимости, чтобы функциональность обновления работала так, как ожидалось.
Обратите внимание, что это все еще работает в Chrome. Кажется глупым, что нам может потребоваться рекомендовать нашим пользователям использовать Chrome из-за этой проблемы!
UPDATE:
Обходной путь для этого, похоже, заключается в том, чтобы всегда загружать объект Silverlight на свою страницу хостинга динамически с помощью JavaScript.
например.
function onLoad() {
var silverlightControlHost = document.getElementById("silverlightControlHost");
silverlightControlHost.innerHTML = "<object ...
Ответ 2
У меня все еще были проблемы с решением, представленным Крисом.
Это отлично работает для меня:
window.onbeforeunload = function () {
var silverlightControlHost = document.getElementById("silverlightControlHost");
silverlightControlHost.innerHTML = "";
}
Ответ 3
Я решил проблему очень просто. Я написал javascript-код в конце страницы (или после тега объекта, где находится ваше приложение silverlight), и установите фокус на другой элемент, например ссылку. Пример:
<object id="silverlightHostControl">...bla bla bla</object>
<script type="text/javascript" language="javascript">
var shc = document.getElementById("silverlightHostControl");
document.getElementById("myLink").focus();
</script>
Shc var бесполезен, я просто уточню. Помните: ваш код javascript должен установить фокус на другой (но настраиваемый) объект ПОСЛЕ того, как тег объекта приложения silverlight был разобран, что означает, что ваш js-код записывается после объекта приложения silverlight.
Ответ 4
В ответ на ваш вопрос №1 это происходит и с нашими приложениями Silverlight. Единственными обходными решениями являются 1) перезапуск браузера или 2) переход в режим совместимости.
По-видимому, это ошибка в ie10.
Ответ 5
Спасибо за все решения обходных решений, но это, очевидно, ошибка с плагином Silverlight.
Мы собрали несколько билетов непосредственно с командой разработчиков Internet Explorer, и они сказали, что проблема связана с внешней проблемой. Это не хороший ответ от Microsoft.
В любом случае, на этот раз наши разработчики подняли билет через команду разработчиков Silverlight, которая все еще ждет ответа. Чтобы получить хороший ответ от них, нам нужно привлечь больше людей, столкнувшихся с этой проблемой.
Вы можете проголосовать за эту проблему на веб-сайте Connect, который является официальной платформой отчетности Microsoft.
Ссылка на наш билет: http://connect.microsoft.com/VisualStudio/feedback/details/789004/ie10-shows-blank-page-upon-refreshing-silverlight-app
Приветствия
Мох
Ответ 6
Да, я тоже сталкиваюсь с одной проблемой с одним моим приложением. Если я открою помощь моего приложения в IE 10, я должен каждый раз обновлять страницу для просмотра содержимого.
У меня есть два способа решения этой проблемы:
1. Нажмите клавишу ALT один раз
2. Откройте IE в совместимом режиме