웹 브라우저 양식을 통해 페이지를로드하는 응용 프로그램을 작성했습니다. 페이지 로딩은 webbrowser_DocumentCompleted 함수에서 webbrowser.navigate를 통해 수행됩니다. 이것은 꽤 잘 작동합니다. 그러나 응용 프로그램에 네트워크가 없으면 "이 페이지를 표시 할 수 없습니다."- 페이지가 표시됩니다. 대신 사용자 정의 페이지를 표시 할 수 있습니까? 그렇다면 어떻게? 도와 줘서 고마워.변경 "이 페이지를 사용자 정의 페이지로 표시 할 수 없습니다"
답변
응용 프로그램 시작시 네트워크 검사를 수행 할 수 있으며 실패하면 오류 페이지로 리디렉션 할 수 있습니까? 다음과 같은 코드를 사용할 수 있습니다 귀하의 app.config에
다른 방법 라운드 : 응용 프로그램이 HTTP 오류 코드 (404)를받을 때마다
<system.web>
<customErrors>
<error statusCode="404" redirect="error.htm"/>
</customErrors>
는 페이지
에게 error.htm로 리디렉션됩니다 해당 페이지는 귀하의 브라우저에 의해 부여되고 은 아니요 응용 프로그램이므로 아니요, 변경할 수 없습니다.
그러나 할 수있는 일은 웹 브라우저가 반환 한 HTML을 읽은 다음 그 말을 확인하고 이에 따라 행동하는 것입니다.
예 :
//document completed function declaration
{
if (yourWebBrowser.Document.InnerHtml.Contains("This page cannot be displayed")
{
//Do Something
}
}
요는 사용자 지정 오류 페이지를 만들고 web.config
에서 여러 오류 상태에 대한 표시 할 수 있습니다.
사용자 지정 오류 페이지 :
처리되지 않은 예외가 오류 페이지의 세 가지 유형 중 하나가 표시되는 ASP.NET 응용 프로그램에서 발생 : 죽음의 오류 페이지의
- 예외 세부 사항 노란색 화면 ,
런타임 오류 노란색 죽음의 오류 페이지의 화면, 또는
사용자 지정 오류 페이지 나이
기본적으로 모든 유형의 오류로 인해 동일한 사용자 지정 오류 페이지가 표시됩니다. 그러나 HTTP status code
에 대해 다른 맞춤 오류 페이지를 지정하려면 <customErrors>
섹션 내의 <error>
하위 요소를 사용하십시오. 할
<customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx">
<error statusCode="404" redirect="~/ErrorPages/404.aspx" />
</customErrors>
한 가지 방법은 예를 들어, 404
의 HTTP
상태 코드가있는 페이지를 찾을 수 없습니다 오류의 경우에 표시되는 다른 오류 페이지를 가지고, 다음과 같은 마크 업을 포함 할 <customErrors>
섹션을 업데이트 WebBrowser의 Navigated 메서드를 처리 한 다음 WebBrowser 개체의 Document 개체의 Domain 속성에 액세스하려고 시도합니다. 서버가 다운되었거나 존재하지 않는 것처럼 도메인에 액세스 할 수없는 경우 오류가 발생합니다. 그런 다음 오류를 catch하고 다음과 같이 WebBrowser의 Document 개체에 직접 HTML을 작성해야합니다.
Private Sub WebBrowser1_Navigated(sender As Object, e As System.Windows.Forms.WebBrowserNavigatedEventArgs) Handles WebBrowser1.Navigated
Dim doc As HtmlDocument = WebBrowser1.Document
Try
Dim s As String = doc.Domain
Catch ex As Exception
WebBrowser1.Document.Write("<html><body><br/><h1>The site you are trying to reach is offline or hasn't been set up yet. Please contact your system administrator.</h1></body></html>")
End Try
End Sub
그래서, 응답 때, 그냥 코드 블록을 게시 피하려고 해. 대신 코드를 설명하고 왜 작동하는지 잠시 확인하십시오. 좋은 대답은 [커뮤니티 가이드 라인] (https://stackoverflow.com/help/how-to-answer)을 참조하십시오. – LightBender
예제의 코드는 작동하지 않습니다. – tedder84
InnerHtml을 알 수 없습니다. – tedder84
@ tedder84 그게 "예"에 의해 의미가 무엇입니까, 그것은 테스트되지 않았습니다 –