Приложение Silverlight 4 OOB обращается к HTML DOM страницы в элементе управления WebBrowser - PullRequest
2 голосов
/ 20 апреля 2010

Кто-нибудь знает, возможно ли получить доступ к элементу html-страницы и управлять им с помощью элемента управления Silverlight 4 WebBrowser.

Сценарий такой. Пользователь запускает приложение Silverlight OOB с повышенным доверием. Пользователь манипулирует некоторыми данными в приложении, но должен отправить часть данных на внешний веб-сайт. Если я открываю внешний сайт в элементе управления WebBrowser, могу ли я как-то помочь пользователю, предварительно заполнив некоторую информацию в веб-форме внешних сайтов через программный доступ к DOM?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2010

Быстрый ответ: Нет.

Длинный ответ: Первоначальная цель OOTB + WebBrowserControl состояла в том, чтобы помочь клиентам выпекать в обоих форматах Rich Text Format (электронная почта, RSS и т. Д.) И в то же время предоставлять возможность печати для поддержки больших документов (отчетов и т. Д.).

Для iframe применяются те же правила, что и для этого элемента управления (насколько я знаю, нет никаких планов изменить это).

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

- Скотт Барнс / бывший менеджер по продукции Silverlight.

2 голосов
/ 21 апреля 2010

Вы можете выполнять функции javascript внутри элемента управления WebBrowser, используя метод InvokeScript . Обратите внимание, что вы не можете совершать междоменные звонки.

Пример:

HTML-страница

<html ><head>
    <script type="text/javascript">
        function SetValues(val) {
            document.getElementById("q").value = val;
        }
    </script>
</head><body>
<input type="text" id="q" />
</body></html>

Xaml

 <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="268*" />
            <ColumnDefinition Width="132*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="60" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <WebBrowser Name="webBrowser1" Grid.Row="1" Grid.ColumnSpan="2" />
        <Button Content="Search" Name="button1" Click="button1_Click" 
                Grid.Column="1" />
        <TextBox Name="textBox1" />
    </Grid>

код позади

public MainPage()
{
  InitializeComponent();
  webBrowser1.Navigate(new Uri("http://localhost:58976/HTMLPage1.htm"));        
}

private void button1_Click(object sender, RoutedEventArgs e)
{         
  webBrowser1.InvokeScript("SetValues",textBox1.Text);
}
...