0

我在 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 附加事件?

4

2 回答 2

2

是的你可以。

WebBrowser控件有一个ObjectForScripting属性:

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

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

于 2012-07-20T20:20:12.487 回答
1

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

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

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

于 2016-11-23T19:19:01.977 回答