有谁知道是否可以访问和操作由 Silverlight 4 WebBrowser 控件呈现的 html 页面中的元素。
场景是这样的。用户以提升的信任度启动 Silverlight OOB 应用程序。用户在应用程序中操作一些数据,但必须将部分数据提交到外部网站。如果我在 WebBrowser 控件中打开外部站点,有什么方法可以通过对 DOM 的编程访问预先填写外部站点的 Web 表单中的一些信息来帮助用户?
有谁知道是否可以访问和操作由 Silverlight 4 WebBrowser 控件呈现的 html 页面中的元素。
场景是这样的。用户以提升的信任度启动 Silverlight OOB 应用程序。用户在应用程序中操作一些数据,但必须将部分数据提交到外部网站。如果我在 WebBrowser 控件中打开外部站点,有什么方法可以通过对 DOM 的编程访问预先填写外部站点的 Web 表单中的一些信息来帮助用户?
您可以使用InvokeScript 方法在 WebBrowser 控件中执行 javascript 函数。请注意,您不能进行跨域调用。
例子:
网页
<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);
}
快速回答:没有。
长答案: OOTB + WebBrowserControl 的最初目的是帮助客户在富文本格式显示(电子邮件、RSS 等)中进行烘焙,同时为大型文档(报告等)提供打印支持。
与此控件相同的规则适用于 iframe(据我所知,没有任何更改此的计划)。
你刚才提到的场景让我有点紧张,因为我可以看到 Silverlight 团队中的一些人提出了有关安全性的问题 - 因为这可以用作通过 Silverlight 自动对网站等进行 DOS 攻击的一种方式,因为这是毫无戒心的有效载荷(即使信任度较高,用户也经常被骗安装这样的东西——对不起,这是现实)..
- Scott Barnes / 前 Silverlight 产品经理。