2013-12-19 2 views
0

보조 양식의 WebBrowser 객체를 사용하여 URL을 열고, 웹로드시 해당 양식을 닫습니다.하지만 문제가 있습니다.열린 MessageBox가 있는지 확인하십시오.

나는 8 초의 Timer()를 가지고 있고, 8 초 후에도 여전히 살아 있다면 폼은 강제로 닫힐 것이다.

웹 브라우저가 좋지 않아 일부 웹에 내비게이터를 업그레이드해야한다는 경고 (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에서 "확인"대화 상자를 감지하는 방법을 알고 있습니까?

감사합니다.

업데이트

내 웹 브라우저 객체에서이 속성이 :이 같은 NewWindow 이벤트를 처리 한

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

그리고 :

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

답변

0

가 AFAIK에는 내장 없다을 함수에서 이것을 수행하되 이것을 사용하여 모든 대화 상자 메시지를 억제 할 수 있습니다

//은

webBrowser1.ScriptErrorsSuppressed = true; 
+0

안녕하세요 줄리, 답변에 대한 감사를 구현하여 수행 할 수 있습니다, 기본 ActiveX 컨트롤에서 발생뿐만 아니라 스크립트 오류 모든 대화 상자를 숨 깁니다. 그 속성은 사실로 설정되어 있지만이 목적으로는 작동하지 않습니다. – 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; 
    } 
} 
관련 문제