Блог Сергея Байдачного

Мой блог о технологиях

Archive for Январь 9th, 2010

Введение в SilverLight 4: WebBrowser и HtmlBrush элементы управления

4 комментария

Когда я услышал об очередной возможности SilverLight – отображение HTML, то конечно же сильно обрадовался. Ведь это позволило бы разработчикам использовать уже наработанные XML, вместе с XSLT-преобразованием, для отображения отформатированного содержимого (говорят, что слово контент – это уже русское слово, поэтому дальше буду использовать контент). Однако, все оказалось немного более печально, чем в анонсах. Возможность отображения HTML действительно появилась, но работает только для приложений вне браузера (Out Of Browser). И это очень странно. Ведь если речь идет об Internet-приложениях, то вряд ли конечный пользователь будет что-то устанавливать себе на машину, не поработав предварительно с приложением в окне браузера. Корпоративный сектор – да, но тут можно использовать и WPF (а то и Win Forms), который к тому же и быстрее. А учитывая способ инсталяции приложений вне браузера (ведь их нельзя отправить по электронной почте или указать ссылку на инсталяцию), разработчики получают дополнительную головную боль при разработке «двух» версий одного приложения (в браузере и вне браузера). Фактически речь будет идти об одной версии, но с различным поведением, в зависимости от способа запуска.

Как бы то не было, но если Вы разрабатываете приложение, работающее вне браузера, то можете использовать элемент управления WebBrowser, расположенный в стандартной сборке System.Windows.dll.

При создании элемента WebBrowser, необходимо явно установить Height и Width свойства, так как по умолчанию они установленны в 0. Также важным свойством является Source, позволяющее установить адрес страницы. Чаще всего это свойство используется для установки начального значения в XAML-файле, но может быть полезно и для получения текущего адреса. Особое внимание нужно обратить на то, что страница, отображаемая в WebBrowser, должна находиться в домене SilverLight-приложения (даже после установки на компьютер пользователя ощущается боязнь DOS-атак у разработчиков этой функциональности). Для отображения HTML-контента в процессе работы приложения, можно использовать один из двух методов:

· Navigate – действие этого метода аналогично установке свойства Source, то есть элемент WebBrowser отобразит страницу, если она находится в домене приложения. Если Вы хотите отобразить внешний контент, то необходимо разместить ссылку на него внутри элемента iframe;

· NavigateToString – этот метод более универсален и позволяет отобразить любой HTML-контент в виде текстовой строки.Это означает, что если Вы хотите отобразить внешний контент, то просто формируете строку, содержащую iframe и указываете ссылку на страницу (независимо от домена).

Ниже показан пример приложения, которое позволяет осуществлять навигацию на любую страницу из SilverLight-приложения.

Интерфейс приложения, содержащий WebBrowser и элементы навигации:

<UserControl x:Class="HTML_Chapter0.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
> 
    <StackPanel x:Name="LayoutRoot" Background="White">
        <StackPanel Orientation="Horizontal" 
            HorizontalAlignment="Center">
            <TextBox Name="urlText" 
              Text="http://www.microsoft.com" Width="300">
            </TextBox>
            <Button Content="Navigate" Click="Button_Click"></Button>
        </StackPanel>
        <WebBrowser Height="800" Width="1024" Name="webBrowser">
        </WebBrowser>
    </StackPanel>
</UserControl>

А вот и код, осуществляющий навигацию:

private void Button_Click(object sender, RoutedEventArgs e)
{
    webBrowser.NavigateToString(
        String.Format(
        "<iframe height=800 width=1024 src={0}></iframe>",
        urlText.Text));
}

При этом не забудьте сконфигурировать приложение как работающее вне браузера (и установить его после запуска на локальную машину).

Использование iframe позволяет не только отобразить HTML, который находится вне домена приложения, но и внедрить элемент <object>. Это автоматически означает, что SilverLight-приложения с легкостью могут содержать в себе Flash-приложения (например, отображать ролики с youtube).

Нужно еще отметить возможность принудительно выполнять Java-скрипты, содержащиеся в WebBrowser элементе. Для этого используется метод InvokeScript.

В завершении раздела отмечу, что HTML можно использовать в качестве заливки для любого элемента, поддерживающего работу с Brush. Для этих целей существует специальный класс HtmlBrush, который в качестве источника принимает объект WebBrowser.

Written by Sergiy Baydachnyy

09.01.2010 at 20:01

Опубликовано в SilverLight

Tagged with