Skip to main content
 首页 » 编程设计

c#之WPF webbrowser anchor onclick 事件 c#

2024年06月20日40del

我正在我的网络浏览器控件中加载一个页面,我需要在单击 anchor 元素时在我的控件中捕获一个事件。

我想做的是在链接打开网页对话框之前执行一段代码。

这是网页上的元素

<a id="saveExpression" href="#end-result" class="BuilderToolBar Save" title="Save Expression"><span class="displace"></span></a> 

到目前为止,我已经尝试了一些事情。

IServiceProvider serviceProvider = (IServiceProvider)_webBrowserCtrl.Document; 
                    Guid serviceGuid = SID_SWebBrowserApp; 
                    Guid iid = typeof(SHDocVw.IWebBrowser2).GUID; 
                    SHDocVw.IWebBrowser2 myWebBrowser2 = (SHDocVw.IWebBrowser2)serviceProvider.QueryService(ref serviceGuid, ref iid); 
 
 
                    SHDocVw.DWebBrowserEvents_Event wbEvents = (SHDocVw.DWebBrowserEvents_Event)myWebBrowser2; 
                    wbEvents.NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(OnWebBrowserNewWindow); 

上面的代码似乎只有在有“NewWindow”时才会触发,但链接会打开一些网页对话框。

我也试过

                        mshtml.HTMLDocument doc; 
                        doc = (mshtml.HTMLDocument)myWebBrowser2.Document; 
                        mshtml.HTMLDocumentEvents2_Event iEvent; 
                        iEvent = (mshtml.HTMLDocumentEvents2_Event)doc; 
                        iEvent.onclick += new HTMLDocumentEvents2_onclickEventHandler(iEvent_onclick); 
 
    bool iEvent_onclick(IHTMLEventObj pEvtObj) 
    { 
        // Code before the webpage dialog box is opened. 
        return true; 
    } 

这会捕获每个“onclick”事件,但随后会失去点击事件实际作用的方向。

我想要做的就是在按钮打开网页对话框之前捕获对一个特定按钮的点击,执行一个 Action 。我可以通过 onclick 实现此目的,但它不会继续打开对话框,该页面还有一个“文本区域”,当触发 onclick 事件时它会失去焦点。

<textarea name="ctl00$contentForExpressions$txtExpression" id="ctl00_contentForExpressions_txtExpression" onkeyup="commonUi.getPosition(event);expressionCurrentState.updateStatusFlag();" onmouseup="commonUi.getPosition(event)" onpaste="return commonUi.maxLengthPaste(this,&quot;160&quot;);" class="expressionBuilderTextbox" onchange="expressionCurrentState.updateStatusFlag()" onfocus="commonUi.disableToolItems()" type="text" onkeypress="commonUi.disableToolItems(this);" onmousedown="commonUi.getPosition(event)"></textarea>    

是否有更简洁或更简单的方法来实现这一目标?还是我错过了什么?

请您参考如下方法:

只要你在iEvent_onclick中返回true,它应该会进一步处理事件。无论如何,我的工作解决方案是:

private bool iEvent_onclick(IHTMLEventObj pEvtObj) 
{ 
    if (pEvtObj.srcElement != null) 
    { 
        var parent = pEvtObj.srcElement.parentElement; 
        if (parent != null && parent.id == "saveExpression") 
        { 
            MessageBox.Show("Bingo!"); 
            return false; 
        } 
    } 
    return true; 
}