Браузер Silverlight 5 и Safari 5 - PullRequest
2 голосов
/ 30 марта 2012

Мы недавно обновили до silverlight 5. Мы получаем следующее исключение при запуске в браузере Safari 5 ...

Невозможно привести объект типа 'System.Windows.Browser.HtmlElement' к типу 'System.Windows.Browser.HtmlWindow '.

Как мы решаем эту проблему?

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Мы недавно тоже это получили.Первая проблема заключается в том, что Safari отсутствует в официальном списке поддерживаемых браузеров, поэтому, хотя он работал до того, как он снова не гарантированно заработал.

Я предполагаю, что вы используете бизнес-приложение Silverlight с навигацией?Или я верю, что любое бизнес-приложение будет воспроизводить эту проблему.Я исправил это ( найдено здесь ), чтобы изменить основной фрейм контента в MainPage.xaml (или ваш эквивалент, если вы его изменили), включив в него следующее:

 <navigation:Frame JournalOwnership="OwnsJournal" ...

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

РЕДАКТИРОВАТЬ: легко получить его на сафари только в коде позади:

if ( HtmlPage.BrowserInformation.UserAgent.Contains("Safari") )
{
    ContentFrame.JournalOwnership = JournalOwnership.OwnsJournal;
}
0 голосов
/ 03 мая 2013

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

foreach (var key in HtmlPage.Document.QueryString.Keys)

чтобы получить ключи и значения строки запроса, а затем обработать соответствующим образом. Так как HtmlPage.Document больше не является кросс-браузерным, я попробовал все альтернативы, но в итоге создал тип .net, который может вызываться Javascript (JS). Когда страница хоста загружается, я использую JS, чтобы извлечь строку запроса и передать ее в тип .net.

Для этого на странице вашего хоста добавьте:

<param name="onLoad" value="plugInLoaded"/>

и немного JS:

<script type="text/javascript">
     function plugInLoaded(sender) { // code to set values into your .net type }
</script>

Сложность для меня заключалась в том, что нашей SL-странице необходимо немедленно сделать HTTP-запрос для получения данных после рендеринга основного элемента управления. Мы не используем Сервисы RIA. В большинстве примеров MSDN для передачи данных из JS в .net используется нажатие кнопки. Возникло состояние гонки, при котором код JS устанавливал значение для типа .net после визуализации элементов управления SL. Использование Диспетчера решило эту проблему.

Dispatcher.BeginInvoke(() => { // code to get the value from the .net type }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...