简体   繁体   English

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

[英]Using WPF to handle events from JavaScript hosted in WebBrowser control

I have a WebBrowser control hosted on a WPF page. 我在WPF页面上托管了一个WebBrowser控件。 I'm wondering if there is any way for a JavaScript function to call an event in the WPF program. 我想知道JavaScript函数是否有任何方法可以在WPF程序中调用事件。

I have a button on the web page in the WebBrowser control: 我在WebBrowser控件的网页上有一个按钮:

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

In the WPF code, I've tried to hook an event on a button this way: 在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;
    } 

and then call the onclick from my javascript function like this: 然后从我的javascript函数调用onclick,如下所示:

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

The WPF code is called when I press the button but not when onclick is called from SomeEvent. 当我按下按钮时调用WPF代码,但是当从SomeEvent调用onclick时调用WPF代码。

Is there a simpler way to do this? 有更简单的方法吗? Is there a better way to call the onclick event from JS so the attached WPF attached event is called? 是否有更好的方法从JS调用onclick事件,以便调用附加的WPF附加事件?

Yes, you can. 是的你可以。

The WebBrowser control has an ObjectForScripting property: WebBrowser控件具有ObjectForScripting属性:

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

javascript can call methods on that object, which can call methods on your wpf page to fire events, etc. javascript可以调用该对象上的方法,该方法可以调用wpf页面上的方法来触发事件等。

ObjectForScripting is the answer. ObjectForScripting 就是答案。 For convenience sake, here is a link to a Winforms example (I too am using WPF, but there is no example on the WPF page): 为方便起见,这里是Winforms示例的链接(我也使用WPF,但WPF页面上没有示例):

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

For what it's worth, it did not work for me to set my main window as the ObjectForScripting. 对于它的价值,我将主窗口设置为ObjectForScripting并不起作用。 I don't think you can use any kind of FrameworkElement object as your ObjectForScripting. 我不认为您可以使用任何类型的FrameworkElement对象作为您的ObjectForScripting。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何通过WebBrowser控件为WinForms处理Javascript事件 - How to handle Javascript events via WebBrowser control for WinForms 在WinForms / WPF WebBrowser控件中使用外部JavaScript文件 - Using external JavaScript files in a WinForms/WPF WebBrowser control 在C#Webbrowser控件WPF中从Javascript获取返回值 - Getting return value from Javascript in C# Webbrowser control WPF 如何从WPF WebBrowser控件调试页面的JavaScript代码 - How to debug JavaScript code of a page from WPF WebBrowser Control 在WPF WebBrowser控件中禁用JavaScript错误 - Disable JavaScript error in WPF WebBrowser control 我如何将JavaScript事件从Webbrowser WPF控件发送到WPF的C#代码 - How do I send javascript event from webbrowser wpf control to c# code of wpf 如何将数组从wpf控件传递到webbrowser控件中的javascript函数? - How can I pass array from wpf control to javascript function in webbrowser control? 从C#代码调用位于WPF WebBrowser Control中的Javascript函数时出错 - Error when calling Javascript function located in WPF WebBrowser Control from C# code 如何确定是否已从javascript为WPF WebBrowser控件设置了ObjectForScripting? - How does one determine if ObjectForScripting has been set for a WPF WebBrowser control from javascript? 需要一种方法来捕获WinForm Webbrowser控件中的javascript事件 - Need a method to capture javascript events in WinForm webbrowser control
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM