最近在做一个小软件,用到webbrowser控件。在填写表单后提交到下一个页面,因为不符合提交条件(比如时间未到)不能提交成功,需要在这个页面做刷新等待,但是refresh的时候浏览器(这里是webbrowser控件)会弹出对话框说是否“重试”还是“取消”。这个通过代码如何屏蔽,能够做到不提示直接提交。注意:我这里说的是浏览器弹出的对话框,不是前台页面javascript脚本的alert对话框,所以不要告诉我那些如何屏蔽javascript对话框的方法。在网上搜了好久都没找到办法,或者是我没搜对关键字。

解决方案 »

  1.   

    没有API
    你可以浏览到当前网址再submit
      

  2.   


    直接浏览网站就报错转到错误页面了,那还能submit啊。这条路不通。
    我目前的做法是在refresh后再发一个enter操作,不过这样的话,如果当前程序是别的程序,那么会首先跳到我写的程序,非常麻烦。我在用firefox的reload every插件的时候,看到这个插件可以实现我要的功能。不知道这个插件怎么实现的。
      

  3.   

    再加50分,还不信在csdn上解决不了吗?!
      

  4.   

    我也很想知道,不过firefox  是开源,可以看api  ,IE 不行吧。反汇编 看代码……
      

  5.   

    用下截完成解析前的那个什么事件改写html源码,把那个弹窗的代码给改写掉
      

  6.   


    朋友,你还是没搞明白,关键的问题是这个对话框不是html代码生成的,而是浏览器本身生成的,所以你的这个思路不对。
      

  7.   

    我一个程序中派生自WebBrowser的类能够实现拦截网页弹出的“当前页面试图关闭窗口,是否充许。。”这样的对话框。可能对你有些帮助。
            #region ExtendedWebBrowserSite
            class ExtendedWebBrowserSite : System.Windows.Forms.WebBrowser.WebBrowserSite, UnsafeNativeMethods.IDocHostShowUI
            {
                ExtendWebBrowser parent;
                public ExtendedWebBrowserSite(ExtendWebBrowser host)
                    : base(host)
                {
                    parent = host;
                }
                void UnsafeNativeMethods.IDocHostShowUI.ShowMessage(ref UnsafeNativeMethods._RemotableHandle hwnd, string lpstrText, string lpstrCaption, uint dwType, string lpstrHelpFile, uint dwHelpContext, out int plResult)
                {
                    //TODO:自定义
                    plResult = 0;
                    if (lpstrText.IndexOf("网页") != -1 && lpstrText.IndexOf("关闭窗口") != -1)//这里是关键,根据窗口标题内容来判断是否过滤掉它。
                    {
                        parent.OnQuit();
                    }
                    throw new COMException("", S_OK); 
                }
                void UnsafeNativeMethods.IDocHostShowUI.ShowHelp(ref UnsafeNativeMethods._RemotableHandle hwnd, string pszHelpFile, uint uCommand, uint dwData, UnsafeNativeMethods.tagPOINT ptMouse, object pDispatchObjectHit)
                {
                    //TODO:自定义
                }
            }        protected override WebBrowserSiteBase CreateWebBrowserSiteBase()
            {
                return new ExtendedWebBrowserSite(this);
            }
            #endregion
    如果想了解详细情况可联系我QQ 184263203
      

  8.   

    ls的方法解决不了我的问题,还是非常感谢。
    我自己解决了,也就是个参数的问题,refresh方法可以带参数,虽然msdn上写了,建议不要使用,但是我目前用过后没发现什么副作用。