Приложение Silverlight исчезает при обновлении страницы в IE10

UPDATE: существует обходной путь к проблеме. Это заставить 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, щелкнув по нему, а затем нажму F5, оно просто погаснет. Это похоже на то, что плагин полностью исчезает. Если я отслеживаю запросы с помощью Fiddler, я вижу, что запрос не выдается для файла xap. Я надеялся, что это будет исправлено в релизе патча для IE10, но пока ничего изменился. Я не могу найти никакой информации об этом, когда я пытаюсь ее найти. Кажется маловероятным, что я буду первым человеком, обнаружившим его, и я очень удивлен, что не нахожу больше информации. Чтобы воспроизвести проблему:

  • создать новое приложение Silverlight
  • добавить какой-то контент на MainPage.xaml, как кнопка или что-то
  • запустите приложение в IE10 (на Win8)
  • Нажмите в любом месте в Silverlight приложение. Это просто, чтобы сфокусировать плагин.
  • обновить страницу (F5)
  • результат: приложение Silverlight не загружается и страница пустая.

несколько замечаний:

  • после шагов выше, никакое количество освежать не принесет применение назад.
  • после вышеуказанных шагов, если я повторно введу url-адрес в адресную строку и нажму Enter, приложение загрузится, как ожидалось.
  • Если Я включите представление совместимости в IE, приложение также загружается, как ожидалось. Ничто из того, что я делаю, не воспроизводит ошибку, когда включен режим совместимости.

теперь мои вопросы:

  1. кто-нибудь еще наблюдается такое поведение?
  2. если да, вы нашли обходной путь?

6 ответов


Я вижу ту же проблему с моим приложением Silverlight в IE 10.

Я попытался добавить мета-тег совместимости IE 8, предложенный выше, но это не решает проблему последовательно. Кажется, он работает только с перерывами, после каждой попытки обновления 5th?!

единственный способ, которым я могу видеть, чтобы обойти это последовательно, - это заставить режим браузера "IE 10 Compatibility View", и я не думаю, что это можно сделать с помощью содержимого страницы (мета-тег и т. д.)? Мне пришлось удалить мета-тег совместимости IE 8, чтобы кнопка "просмотр совместимости" была доступна в адресной строке, а затем попросить пользователей нажать кнопку совместимости, которая затем запоминается для сайта. Это приводит к тому, что браузер переходит в режим браузера: "IE 10 Compat View "и режим документа:"стандарты IE7". Затем поведение обновления работает последовательно, как ожидалось и как раньше.

Это большая проблема для нас. Мы построили наше приложение Silverlight таким образом, что кнопка обновления браузера используется для обновления страниц / контента в приложении (пользователи остаются в системе и т. д.). Очень плохо, что мы должны попросить пользователей настроить наш сайт для работы в режиме совместимости, чтобы функции обновления работали должным образом.

обратите внимание, что это по-прежнему работает, как ожидалось в Chrome. Кажется глупым, что нам может потребоваться рекомендовать нашим пользователям использовать Chrome из-за этой проблемы!

обновление:

обходной путь для этого, кажется, всегда загружайте объект Silverlight на страницу размещения динамически с помощью JavaScript.

Э. Г.

function onLoad() {
  var silverlightControlHost = document.getElementById("silverlightControlHost");
  silverlightControlHost.innerHTML = "<object ...

обновление 2:

вот последний код, который я использую для решения этой проблемы:

...
        function unloadSilverlight() {
            document.getElementById("silverlightControlHost").innerHTML = "";
        }

        function focusOnSilverlight() {
            document.getElementById("silverlightObject").focus();
        }

        function onLoad() {
            window.onbeforeunload = unloadSilverlight;
            setTimeout(focusOnSilverlight);
        }
    </script>
</head>
<body onload=" onLoad() ">
...

У меня все еще были проблемы с решением, представленным Крисом.

это отлично работает для меня, хотя:

window.onbeforeunload = function () {
            var silverlightControlHost = document.getElementById("silverlightControlHost");
            silverlightControlHost.innerHTML = "";
        }

Я решил проблему очень простым способом. Я написал код javascript в конце страницы (или после тега объекта в where Is your silverlight app) и установил фокус на другой элемент, например, ссылку. Пример:

<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.


в ответ на ваш вопрос #1, это происходит с нашими приложениями Silverlight, а также. Только обходные 1) перезапустить браузер, или 2) Перейти в режим compatibiity.

Это, по-видимому, ошибка в ie10.


Спасибо за все обходные решения, но это, очевидно, ошибка с плагином Silverlight.

мы подняли несколько билетов непосредственно с командой разработчиков Internet explorer, и они сказали, что проблема связана с внешней проблемой. Это не очень хороший ответ от Microsoft.

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

вы можете проголосовать за эту проблему с веб-сайта Connect, который является официальной платформой отчетов об ошибках Microsoft.

ссылка на наш билет: http://connect.microsoft.com/VisualStudio/feedback/details/789004/ie10-shows-blank-page-upon-refreshing-silverlight-app

Ура

Moh


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

У меня есть два решения этой проблемы: 1. Нажмите клавишу ALT один раз 2. Откройте IE в совместимом режиме