例如AxWebBrowser 浏览一个网页,网页上的关闭此页按钮(window.close),会弹 出一个确认对话框,如何在code部分捕捉用户点击的是哪一个?想在2个选择的事件都作自己的一个方法例如
if(button == "Yes"){
  OnClose();
}else{
  OnCloseNo();
}

解决方案 »

  1.   

    捕获WindowsClosing事件自己显示一个确认对话框
      

  2.   

    WindowsClosing其实是已经执行了关闭这个事件的 SHDocVw.DWebBrowserEvents2_WindowClosingEventHandler WindowClosingE =
    new SHDocVw.DWebBrowserEvents2_WindowClosingEventHandler(OnWindowClosing);
    ie_events.WindowClosing += WindowClosingE;
    private void OnWindowClosing(bool isChildWindow, ref bool cancel)
    {
    try
    {
    cancel = true;//显示确认框,但这里其实已经执行了关闭事件,这时候AxWebBrowser 其实是已经被关掉了 }
    catch(Exception ex)
    {
    Console.WriteLine(" ex.Message+"\r\n"+ex.StackTrace);
    }
    }
      

  3.   

    不明白为什么不用.net自带的WebBrowser控件?
      

  4.   

    就是WebBrowser控件阿
    我需要捕捉javascript事件
      

  5.   

    if(button == "Yes"){
      CallClose();
    }else{
      CallCloseNo();
    }在网页的js脚本中写
    function callClose()
    {
        window.external.CallUIClose
    }在程序中写
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IJsCall
    {
    void CallUIClose();
    ......
    } // interface IJsCall
    public class JsCallClass : IJsCall
    {
    private Form1 frm; public JsCallClass(Form1 pfrm)
    {
    this.frm = pfrm;
    } #region IJsCall 成员 public void CallUIClose()
    {
                          ......

                       ......
              }还有这一段
    class test : IDocHostUIHandler
    {
    private PlayerMainForm frm;
    public MarqueeUIHandler(PlayerMainForm pfrm)
    {
    this.frm = pfrm;
    } #region IDocHostUIHandler 成员
    public void EnableModeless(int fEnable)
    {
    // TODO:  添加 MarqueeUIHandler.EnableModeless 实现
    } public void GetOptionKeyPath(out string pchKey, uint dw)
    {
    // TODO:  添加 MarqueeUIHandler.GetOptionKeyPath 实现
    pchKey = null;
    } public void TranslateAccelerator(ref tagMSG lpmsg, ref Guid pguidCmdGroup, uint nCmdID)
    {
    // TODO:  添加 MarqueeUIHandler.TranslateAccelerator 实现
    } public void FilterDataObject(MsHtmHstInterop.IDataObject pDO, out MsHtmHstInterop.IDataObject ppDORet)
    {
    // TODO:  添加 MarqueeUIHandler.FilterDataObject 实现
    ppDORet = null;
    } public void OnFrameWindowActivate(int fActivate)
    {
    // TODO:  添加 MarqueeUIHandler.OnFrameWindowActivate 实现
    } public void UpdateUI()
    {
    // TODO:  添加 MarqueeUIHandler.UpdateUI 实现
    } public void ShowContextMenu(uint dwID, ref MsHtmHstInterop.tagPOINT ppt, object pcmdtReserved, object pdispReserved)
    {
    // TODO:  添加 MarqueeUIHandler.ShowContextMenu 实现
    } public void TranslateUrl(uint dwTranslate, ref ushort pchURLIn, System.IntPtr ppchURLOut)
    {
    // TODO:  添加 MarqueeUIHandler.TranslateUrl 实现
    } public void ShowUI(uint dwID, IOleInPlaceActiveObject pActiveObject, IOleCommandTarget pCommandTarget, IOleInPlaceFrame pFrame, IOleInPlaceUIWindow pDoc)
    {
    // TODO:  添加 MarqueeUIHandler.ShowUI 实现
    } public void GetExternal(out object ppDispatch)
    {
    // TODO:  添加 MarqueeUIHandler.GetExternal 实现
    ppDispatch = new JsCallClass(frm);
    } public void ResizeBorder(ref MsHtmHstInterop.tagRECT prcBorder, IOleInPlaceUIWindow pUIWindow, int fRameWindow)
    {
    // TODO:  添加 MarqueeUIHandler.ResizeBorder 实现
    } public void GetDropTarget(IDropTarget pDropTarget, out IDropTarget ppDropTarget)
    {
    // TODO:  添加 MarqueeUIHandler.GetDropTarget 实现
    ppDropTarget = null;
    } public void GetHostInfo(ref _DOCHOSTUIINFO pInfo)
    {
    pInfo.dwFlags |= ( 0x08/*0x08 DOCHOSTUIFLAG_SCROLL_NO*/ |
    0x04 /*DOCHOSTUIFLAG_NO3DBORDER*/
    );
    } public void HideUI()
    {
    // TODO:  添加 MarqueeUIHandler.HideUI 实现
    } public void OnDocWindowActivate(int fActivate)
    {
    // TODO:  添加 MarqueeUIHandler.OnDocWindowActivate 实现
    } void MsHtmHstInterop.IDocHostUIHandler.TranslateAccelerator(ref MsHtmHstInterop.tagMSG lpmsg, ref Guid pguidCmdGroup, uint nCmdID)
    {
    // TODO:  添加 MarqueeUIHandler.MsHtmHstInterop.IDocHostUIHandler.TranslateAccelerator 实现
    } void MsHtmHstInterop.IDocHostUIHandler.TranslateUrl(uint dwTranslate, ref ushort pchURLIn, System.IntPtr ppchURLOut)
    {
    // TODO:  添加 MarqueeUIHandler.MsHtmHstInterop.IDocHostUIHandler.TranslateUrl 实现
    } #endregion
    }
      

  6.   

    还有
    ICustomDoc doc = (ICustomDoc) axWebBrowser1.Document;
    doc.SetUIHandler( new test(this) );
      

  7.   

    没怎么明白,我的是winform, axWebBrowser1控件,没有js啊。
    例如就是用axWebBrowser1浏览一个网页,网页上有关闭的js(window.close())现在的问题就是如何在winform上捕捉到这个js事件
      

  8.   

    有网页的JS脚本里加上一句CallClose();
    然后在网页里加上这个方法
    function callClose()
    {
        window.external.CallUIClose()
    }
    这个就是用来让winform捕捉的,直接让winform捕捉我不知道怎么做,但这样做也可以实现
      

  9.   

    这个可以做到了,捕捉 HandleDestroyed 事件可以判断是确认关闭