是否有人知道是否可以访问和操作由Silverlight4 WebBrowser控件呈现的html页面中的元素。
场景是这样的。用户使用提升的信任启动Silverlight OOB应用程序。用户操作应用程序中的一些数据,但必须将部分数据提交到外部网站。如果我在WebBrowser控件中打开外部站点,是否可以通过编程访问DOM来帮助用户在外部站点的web表单中预先填充一些信息?
发布于 2010-04-25 12:28:00
快速回答:否。
长篇解答: OOTB + WebBrowserControl的初衷是帮助客户烘焙富文本格式的显示(电子邮件、RSS等),同时提供打印大型文档(报表等)的能力。
同样的规则适用于iframe,就像你使用这个控件一样(据我所知,没有任何计划改变这一点)。
你刚才提到的场景让我有点紧张,因为我可以看到Silverlight团队中的一些人提出了关于安全的问题-因为这可以被用作通过Silverlight自动对网站等进行DOS攻击的一种方式(即使有更高的信任,用户也经常被骗安装这样的东西--这是事实,对不起)。
发布于 2010-04-21 07:35:22
您可以使用InvokeScript method在WebBrowser控件中执行javascript函数。注意,您不能进行跨域调用。
示例:
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);
}
https://stackoverflow.com/questions/2677536
复制