Приложение Silverlight 4 OOB обращается к HTML DOM страницы в элементе управления WebBrowser
Кто-нибудь знает, возможно ли получить доступ и управлять элементом на html-странице, отображаемой элементом управления Silverlight 4 WebBrowser.
Сценарий такой. Пользователь запускает приложение Silverlight OOB с повышенным доверием. Пользователь манипулирует некоторыми данными в приложении, но должен отправить часть данных на внешний веб-сайт. Если я открою внешний сайт в элементе управления WebBrowser, могу ли я как-нибудь помочь пользователю, предварительно заполнив некоторую информацию в веб-форме внешних сайтов через программный доступ к DOM?
2 ответа
Быстрый ответ: Нет.
Длинный ответ: Первоначальная цель OOTB + WebBrowserControl состояла в том, чтобы помочь клиентам выпекать в обоих форматах Rich Text Format (электронная почта, RSS и т. Д.) И в то же время предоставлять возможность печати для поддержки больших документов (отчетов и т. Д.).
Для iframe применяются те же правила, что и для этого элемента управления (насколько я знаю, нет никаких планов изменить это).
Сценарий, который вы только что упомянули, заставил меня немного нервничать, так как я вижу, как некоторые ребята из команды Silverlight поднимают вопрос о безопасности - в том смысле, что это можно использовать как способ автоматизации DOS-атак на веб-сайты и т. Д. С помощью Silverlight как ничего не подозревающего полезная нагрузка (даже при повышенном доверии пользователи часто обманывают себя при установке подобных вещей - в реальности это жаль)..
-Скотт Барнс / бывший менеджер по продукту Silverlight.
Вы можете выполнять функции 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);
}