문제

XHTML 페이지에 마크 업 오류가 발생하면 Mozilla Firefox는 "노란색 사망 스크린"을 표시하여 노란색 배경에 큰 빨간 오류 메시지 만 표시됩니다.

이러한 오류는 드물지만 그렇습니다 극도로 사용자 친화적 인.

JavaScript를 사용하여 이들을 감지하고 서버로 다시 메시지를 보낼 수있는 방법이 있습니까?

지금까지 발견 한 내용 : - 구문 분석 오류가 계속 실행되기 전에 스크립트가 배치되었습니다. (물론) -이 스크립트에서 설정된 시간 초과 및 간격은 구문 분석 오류 후에도 여전히 실행됩니다. - Firefox에서 Dom은 a입니다 <parsererror> a <sourcetext> 그 안에. 쿼리하면 이것을 감지 할 수 있습니다 document.firstChild.tagName.

나머지 질문 : - 이런 일을 감지하기 위해들을 수있는 어떤 이벤트를 사용할 수 있습니까? (폴링 짜증) - 다른 브라우저에서 어떻게 이것을 감지 할 수 있습니까?

도움이 되었습니까?

해결책

클라이언트에서 구문 분석 오류를 포착하면 가능할 수 있지만 실제로 잘못된 문제를 해결하고 있습니다.

나는 이것이 당신이 요청한 것이 아니라는 것을 알고 있지만, 당신이 다른 마크 업 언어를 포함시키는 것과 같은 진정한 xhtml에 따라 무언가를하고 있지 않으면, 당신은 당신의 페이지를 application/xhtml+xml 대신 텍스트/html로 제공해야합니다. xhtml이더라도. 텍스트/html로 제공하면 문제가 발생하지 않고 페이지가 IE에서도 작동하도록합니다. 과도기적 문학을 사용하여 사용되는 구문 분석을 결정하는 DocType 선언이 아니라 MIME 유형이 아닙니다.

즉, 페이지를 XHTML로 구문 분석하고 싶다고 확신한다면 서버에서 이러한 종류의 오류를 처리하는 것이 좋습니다. DOM을 구축하여 페이지를 생성 한 다음 직렬화 결과를 보냅니다. 이것이 옵션이 아닌 경우 지금처럼 페이지를 생성하는 것으로 시작하지만 아직 클라이언트에게 전송하지 마십시오. 생성 한 XHTML을 가져 가서 IT 서버 측면을 유효성있는 XHTML 파서 (또는 최소한 일반 XML 파서)로 구문 분석하십시오. 오류가 발생하면 원하는 오류 페이지를 표시하십시오. 그렇지 않으면 구문 분석 된 DOM을 직렬화하여 클라이언트에게 보냅니다.

요약하면, Application/XHTML+XML을 사용하기위한 기본 규칙은 다음과 같습니다.

  1. 하지 않다.
  2. (고급 사용자의 경우) 페이지가 텍스트/html로 제공되는 경우 작동하지 않는 일을하고 있음을 입증하지 않는 한 그렇지 않습니다. 이것은 XHTML 문서의 작은 비율 중 작고 작은 부분에 적용됩니다.
  3. 페이지를 Application/XHTML+XML로 제공 해야하는 경우 유효성을 보장하는 몇 가지 방법으로 생성하십시오.
  4. 너가 아니라면 진짜 당신이하고있는 일을 알고, 절대 사용자 입력이 포함 된 페이지에 Application/XHTML+XML을 사용하십시오.

XHTML은 단지 HTML 4의 재구성과 다른 언어를 포함시키는 능력 일뿐입니다. 임베딩을 사용하지 않는 경우, 가지고있는 것은 다르지만 거의 완전히 호환되는 구문을 가진 HTML 4입니다. XHTML 문서의 압도적 인 대다수는 텍스트/HTML로 사용되므로 브라우저에 의해 HTML 4처럼 취급됩니다.

다른 팁

이것은 귀하의 질문에 대한 답변은 아니지만 대신 서버에서 XHTML을 검증 한 후/생성시기 및 브라우저로 보내기 전에 왜 서버에서 XHTML을 검증하지 않습니까?

첫 번째 질문은 다음과 같습니다. Internet Explorer는 실제로 Application/XHTML+XML을 MIME 유형으로 쉽게 지정하거나 모든 것을 잘 지원할 수 없으므로 왜 XHTML 구문 분석 오류를 감지해야합니까?

오류 감지에 관해서는 http://www.quirksmode.org

서버 측에서 문서를 검증하는 것이 좋습니다. 그러나 클라이언트 측에서 실제로하고 싶다면 올바르게 완료되면 폴링에 아무런 문제가 없습니다 (이는 설문 조사가 종료되도록 보장 함을 의미합니다).

다음과 같은 ~해야 한다 최소한 Firefox 및 Opera에서 작업하십시오.

(function() {
    if(document.documentElement &&
        document.documentElement.getAttribute('xmlns') !==
        'http://www.w3.org/1999/xhtml') {
        alert('parsing errors');
    }
    else if(document.body && document.body.lastChild) {
        alert('no parsing errors');
    }
    else setTimeout(arguments.callee, 100);
})();

아마도 그것이 가장 도움이되는 답변이 아님을 알고 있지만, 과도기 도대로 전환하는 것을 고려 했습니까?

반드시 파일을 구문 분석기에 넣어 오류를 감지하지만 오프라인으로 수행하십시오. 사용자에게 YSOD를 보여줄 위험은 그만한 가치가 없습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top