最近在做一个小软件,用到webbrowser控件。在填写表单后提交到下一个页面,因为不符合提交条件(比如时间未到)不能提交成功,需要在这个页面做刷新等待,但是refresh的时候浏览器(这里是webbrowser控件)会弹出对话框说是否“重试”还是“取消”。这个通过代码如何屏蔽,能够做到不提示直接提交。注意:我这里说的是浏览器弹出的对话框,不是前台页面javascript脚本的alert对话框,所以不要告诉我那些如何屏蔽javascript对话框的方法。在网上搜了好久都没找到办法,或者是我没搜对关键字。
你可以浏览到当前网址再submit
直接浏览网站就报错转到错误页面了,那还能submit啊。这条路不通。
我目前的做法是在refresh后再发一个enter操作,不过这样的话,如果当前程序是别的程序,那么会首先跳到我写的程序,非常麻烦。我在用firefox的reload every插件的时候,看到这个插件可以实现我要的功能。不知道这个插件怎么实现的。
朋友,你还是没搞明白,关键的问题是这个对话框不是html代码生成的,而是浏览器本身生成的,所以你的这个思路不对。
#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
我自己解决了,也就是个参数的问题,refresh方法可以带参数,虽然msdn上写了,建议不要使用,但是我目前用过后没发现什么副作用。