使用WPF处理来自WebBrowser控件中托管的JavaScript的事件

时间:2012-07-20 20:09:37

标签: javascript wpf

我在WPF页面上托管了一个WebBrowser控件。我想知道JavaScript函数是否有任何方法可以在WPF程序中调用事件。

我在WebBrowser控件的网页上有一个按钮:

<button style="height:100;width:100" id="initButton"  onclick="alert('hello');" />

在WPF代码中,我试图通过这种方式在一个按钮上挂钩事件:

        mshtml.HTMLButtonElementEvents_Event iEvent;
        iEvent = (mshtml.HTMLButtonElementEvents_Event)ele;
        iEvent.onclick += new HTMLButtonElementEvents_onclickEventHandler(ClickEventHandler);
        ...

    private bool ClickEventHandler()
    {
        MessageBox.Show("WPF Event Handler");
        return true;
    } 

然后从我的javascript函数中调用onclick,如下所示:

function SomeEvent(sender, e) {
    alert('JS event handler');
    document.getElementById("initButton").onclick();
 }

当我按下按钮时调用WPF代码,但是当从SomeEvent调用onclick时调用WPF代码。

有更简单的方法吗?是否有更好的方法从JS调用onclick事件,以便调用附加的WPF附加事件?

2 个答案:

答案 0 :(得分:2)

是的,你可以。

WebBrowser控件具有ObjectForScripting属性:

http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.objectforscripting.aspx

javascript可以调用该对象上的方法,该方法可以调用wpf页面上的方法来触发事件等。

答案 1 :(得分:0)

ObjectForScripting 的答案。为方便起见,这里是Winforms示例的链接(我也使用WPF,但WPF页面上没有示例):

https://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.objectforscripting(v=vs.110).aspx

对于它的价值,我将主窗口设置为ObjectForScripting并不起作用。我不认为您可以使用任何类型的FrameworkElement对象作为您的ObjectForScripting。