我在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附加事件?
答案 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页面上没有示例):
对于它的价值,我将主窗口设置为ObjectForScripting并不起作用。我不认为您可以使用任何类型的FrameworkElement对象作为您的ObjectForScripting。