Pergunta

Quando eu tenho um erro de marcação em minha página XHTML, Mozilla Firefox exibe a "tela amarela da morte", mostrando apenas uma grande mensagem de erro vermelho em um fundo amarelo.

Enquanto esses erros são raros, eles são extremamente user-hostil.

Existe uma maneira que eu possa detectar estes utilizando Javascript, e, assim, enviar um back mensagem para o servidor?

O que eu descobri até agora: - Scripts colocados antes do erro de análise ainda executar. (Claro.) - Tempos limite e intervalos que foram definidas nesses scripts ainda será executado após o erro de análise. - No Firefox, o DOM é uma <parsererror> com um <sourcetext> dentro dela. Posso detectar isso se eu consulta document.firstChild.tagName.

perguntas restantes: - Que eventos estão disponíveis que eu poderia ouvir para detectar esta acontecendo? (Sondagem suga.) - Como posso detectar isso em outros navegadores

Foi útil?

Solução

Catching erros de análise no cliente pode ser possível, mas é realmente resolver o problema errado.

Eu sei que isto não é o que você pediu, mas a menos que você está fazendo algo realmente específico do XHTML como a incorporação de alguma outra linguagem de marcação, você deve servir sua página como text / html em vez de aplicativo / xhtml + xml. Mesmo que seja XHTML. Ao servir-lo como text / html você vai evitar o problema que você está correndo em e permitir que sua página para trabalhar no IE também. Note-se que é o tipo MIME e não a declaração doctype que determina quais analisador é utilizado -. Usando um doctype de transição não deverá fazê-lo

Dito isto, se você está realmente certo de que quer sua página analisado como XHTML, é melhor para lidar com esse tipo de erro no servidor. Gerar sua página através da construção de um DOM e, em seguida, enviar o resultado de serialização-lo. Se isso não é uma opção, em seguida, iniciar gerando a página como você faz agora, mas não transmiti-lo para o cliente ainda. Leve o XHTML que você gerou e analisá-lo do lado do servidor com um analisador XHTML validar (ou, pelo menos, um parser XML genérico). Se você receber erros, exibir qualquer página de erro que você deseja. Caso contrário, serializar o DOM analisado e enviar para o cliente.

Em resumo, as regras básicas para usar application / xhtml + xml são:

  1. Não.
  2. (para usuários avançados) Não, a menos que você já provou que você está fazendo algo que não vai funcionar se a página é servido como text / html. Isso se aplica a uma pequena fração minúscula de um por cento dos documentos XHTML,.
  3. Se você deve servir a sua página como application / xhtml + xml, gerá-lo com algum método que garante validade.
  4. A menos que você realmente saber o que você está fazendo, não uso application / xhtml + xml para uma página que inclui entrada do usuário.

Lembre-se que XHTML é apenas uma reformulação do HTML 4, mais a capacidade de incorporar outras línguas. Se você não usar a incorporação, o que você tem é HTML 4 com uma sintaxe diferente, mas quase completamente compatível. A esmagadora maioria dos documentos XHTML estão lá fora, servido como text / html e, portanto, tratado como HTML 4 por browsers.

Outras dicas

Isto não responder à sua pergunta, mas, em vez disso, por que não validar a sua XHTML no seu servidor, depois de / quando gerá-lo e antes de enviá-lo para o navegador?

A minha primeira pergunta seria: Desde o Internet Explorer não facilmente permitir que você realmente especificar application / xhtml + xml como o tipo mime, nem apoiá-lo tão bem, por que você precisa para detectar erros de análise XHTML

Como para detectar os erros - ter um olhar para http://www.quirksmode.org

Eu recomendo validar o documento no lado do servidor. Mas se você realmente deseja fazê-lo no lado do cliente, não há nada de errado com polling, se feito corretamente (o que significa que a pesquisa é garantida para terminar).

A seguir deve trabalho em pelo menos Firefox e 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);
})();

Eu sei que não é provavelmente a resposta mais útil, mas você já pensou em mudar para um doctype de transição?

Por todos os meios, colocar seus arquivos através de um analisador para detectar erros, mas fazê-lo offline - o risco de mostrar aos usuários a YSOD não vale a pena

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top