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

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

Введение в 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 в 20:01

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

Tagged with

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

Subscribe to comments with RSS.

  1. […] Читать полную версию в моем блоге о технологиях Опубліковані Saturday, January 09, 2010 8:07 PM від Sergiy Baydachnyy […]

  2. Как вы думаете, будет ли в финальном релизе Silverlight 4 WebBrowser контрол работать в браузере(NOT out of browser)?

    Владимир

    22.01.2010 at 01:03

    • Не будет. Это как раз сделать сложно, в отличии от какого-нибудь элемента, отображающего форматированный текст. Но кроме RichTextArea не будет ничего.

      Sergiy Baydachnyy

      22.01.2010 at 07:50

  3. В версии 5 не отображается содержимое iframe. Может быть есть еще какие варианты? Заранее спасибо.

    medexplorer

    23.08.2016 at 10:25


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: