1

我们可以在 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 但这不符合我的目标

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

4

1 回答 1

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 方法。这个帮助类被设置为 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

于 2012-09-06T06:12:56.177 回答