Silverlight 4 OOB应用程序访问WebBrowser控件中页面的HTML DOM

Silverlight 4 OOB应用程序访问WebBrowser控件中页面的HTML DOM,silverlight,dom,silverlight-4.0,webbrowser-control,out-of-browser,Silverlight,Dom,Silverlight 4.0,Webbrowser Control,Out Of Browser,有人知道是否可以访问和操作Silverlight 4 WebBrowser控件呈现的html页面中的元素吗 情况是这样的。用户启动具有提升信任度的Silverlight OOB应用程序。用户操作应用程序中的某些数据,但必须将部分数据提交到外部网站。如果我在WebBrowser控件中打开外部站点,是否有任何方法可以通过对DOM的编程访问在外部站点的web表单中预先填充一些信息来帮助用户 您可以使用在WebBrowser控件内执行javascript函数。请注意,您不能进行跨域调用 例如: Html

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


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

您可以使用在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>

快速回答:否。

长答案: OOTB+WebBrowserControl的初衷是帮助客户以富文本格式显示(电子邮件、RSS等)进行烘焙,同时提供打印大型文档(报告等)的能力

同样的规则也适用于iframe,就像您使用这个控件一样(据我所知,没有任何计划更改它)

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

- 斯科特·巴恩斯/前Silverlight产品经理。

你看到问题中关于“外部网站”的部分了吗?如果跨域不起作用,那么这就不起作用了。
 <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);
}