在后面的代码中处理Web浏览器控件事件

时间:2012-09-06 05:51:05

标签: wpf webbrowser-control

我们可以在Web浏览器控件中处理事件吗?在我的情况下,我将一个单选按钮列表传递给Web浏览器控件,并希望在代码后面处理单选按钮更改事件,我试着谷歌但没有找到任何具体的例子。

 WebBrowser.NavigateToString("<html>
<body>
<input type='radio' name='g1' value='V1'> V1<br>
<input type='radio' name='g1' value='V2' V2<br>
</body>
</html>");

如何在代码隐藏中获得这些单选按钮更改的更改事件,我可以使用javascript但是不能填写我的目标

任何人都可以建议如何做到这一点。

1 个答案:

答案 0 :(得分:4)

从Javascript调用C#方法

html文档和WPF之间的通信要求您在应用程序之间拥有完全的信任。在javascript中,window.external指向外部应用程序,您可以使用它来调用WebBrowser外部的方法。

要执行此操作,您需要在两者之间创建一个接口。应该使用可以使用Javascript直接访问的辅助方法。让我们看看如何使用WPF WebBrowser Control实现这一目标。

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
    Mainwindow mExternalWPF;
    public ObjectForScriptingHelper(Window1 w)
    {
        this.mExternalWPF = w;
    }

}

所以基本上这个类允许你直接从javascript调用.NET方法。此帮助程序类设置为Permission to FullTrust以及ComVisible。因此,我们的WebBrowser实际上是一个Com元素,可以直接与类通信,以调用ObjectForScriptingHelper类中的方法,该类是加载浏览器的父窗口。 javascript将允许使用window.external指向此类。

[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
[ComVisible(true)]
public class ObjectForScriptingHelper
{
    Mainwindow mExternalWPF;
    public ObjectForScriptingHelper(Window1w)
    {
        this.mExternalWPF = w;
    }
    public void InvokeMeFromJavascript(string jsscript)
        {
            this.mExternalWPF.tbMessageFromBrowser.Text = string.Format("Message :{0}", jsscript);
        }

}

假设我在ObjectForScriptingHelper类中有一个方法InvokeMeFromJavascript。要使用此类,您需要创建它的对象并将其传递给WebBrowser控件的ObjectForScripting属性。

所以我写,

ObjectForScriptingHelper helper = new ObjectForScriptingHelper(this);
this.wbMain.ObjectForScripting = helper;

现在让我们导航到一个html:

<input type="text" id="txtMessage" />
<input type="button" value="InvokeMe" onclick="javascript:window.external.InvokeMeFromJavascript(document.getElementById('txtMessage').value);" />

这将加载文本框和按钮。在上面的代码中看到,我使用window.external来调用我在ObjectForScriptHelper类中声明的相同函数。因此,当您单击WebBrowser中的Button时,您将看到该消息已显示在其外部的TextBlock中。

在上图中,当用户点击WebBrowser中的InvokeMe时,它会更新放在外面的TextBlock。

来源:www.dotnetfunda.com/articles/article840-working-with-webbrowser-in-wpf.aspx