2013-12-19 68 views
0

我在輔助表單中使用WebBrowser對象來打開url,並且在加載web時,獲取並關閉該表單,但是我遇到了一些麻煩。檢測是否有任何打開的確認消息框

我有一個8秒的Timer(),並且如果表單在8秒後仍然存在,表單將被強制關閉。

WebBrowser是一個糟糕的導航器,所以我在某些網站上看到一個「alert()」,告訴我需要升級我的導航器。當WebBrowser對象加載「alert()」時,它會像我的應用程序一樣顯示在MessageBox中,所以我需要先關閉該消息,然後關閉導航器窗體。

對於這一點,我這樣做:

在主要形式有:

int cont = 0; 

    void t_Tick(object sender, EventArgs e) 
    { 
     cont += 1;    

     if (cont == 8) 
     { 
      var formularios = Application.OpenForms; 

      for (int i = formularios.Count - 1; i >= 0; i--) 
      { 
       if (formularios[i] != this) 
       { 
        formularios[i].Dispose(); 
       } 
      } 

      t.Enabled = false; 
     } 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     t.Enabled = true; 

     p = new FormNavigator(); 

     p.Navigate("URL HERE"); 
     p.ShowDialog(); 

    } 

它爲我用「警報()」功能,但某些站點使用「確認()」函數,並用OK/Cancel按鈕打開表單,並且Application.OpenForms不檢測它。

你知道任何方式來檢測從.NET的那些「確認」對話框嗎?

問候。

更新

我有我的web瀏覽器對象這個屬性:

navigator.ScriptErrorsSuppressed = true; 
    navigator.AllowWebBrowserDrop = true; 
    navigator.IsWebBrowserContextMenu = false; 
    navigator.WebBrowserShortcutsEnabled = false; 

而且我已經處理了NewWindow事件是這樣的:

private void navivator_NewWindow(object sender, CancelEventArgs e) 
    { 
     e.Cancel = true; 
    } 

回答

0

AFAIK沒有內置in function do do this,but you can supress all dialogs messages using this

//隱藏了它的所有對話框,從底層的ActiveX控件來源,而不僅僅是腳本錯誤

webBrowser1.ScriptErrorsSuppressed = true; 
+0

朱莉您好,感謝您的回答來完成。我將該屬性設置爲true,但不適用於此目的。 – dank0ne

0

它可以通過實施IDocHostShowUI

int IDocHostShowUI.ShowMessage(IntPtr hwnd, string lpstrText, string lpstrCaption, int dwType, string lpstrHelpFile, int dwHelpContext, out int lpResult) 
{ 
    // return handled 
    // S_OK  Host displayed its UI. MSHTML does not display its message box. 
    // S_FALSE  Host did not display its UI. MSHTML displays its message box. 
    // 
    if (this.CloseOpenDialogs == true) 
    { 
     lpResult = 0; 
     return S_OK; 
    } 
    else 
    { 
     lpResult = 0; 
     return S_FALSE; 
    } 
}