2

有谁知道是否可以访问和操作由 Silverlight 4 WebBrowser 控件呈现的 html 页面中的元素。

场景是这样的。用户以提升的信任度启动 Silverlight OOB 应用程序。用户在应用程序中操作一些数据,但必须将部分数据提交到外部网站。如果我在 WebBrowser 控件中打开外部站点,有什么方法可以通过对 DOM 的编程访问预先填写外部站点的 Web 表单中的一些信息来帮助用户?

4

2 回答 2

2

您可以使用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);
}
于 2010-04-21T07:35:21.667 回答
2

快速回答:没有。

长答案: OOTB + WebBrowserControl 的最初目的是帮助客户在富文本格式显示(电子邮件、RSS 等)中进行烘焙,同时为大型文档(报告等)提供打印支持。

与此控件相同的规则适用于 iframe(据我所知,没有任何更改此的计划)。

你刚才提到的场景让我有点紧张,因为我可以看到 Silverlight 团队中的一些人提出了有关安全性的问题 - 因为这可以用作通过 Silverlight 自动对网站等进行 DOS 攻击的一种方式,因为这是毫无戒心的有效载荷(即使信任度较高,用户也经常被骗安装这样的东西——对不起,这是现实)..

- Scott Barnes / 前 Silverlight 产品经理。

于 2010-04-25T12:28:00.460 回答