Posso detectar XHTML erros de análise usando Javascript?
-
19-08-2019 - |
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
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:
- Não.
- (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,.
- Se você deve servir a sua página como application / xhtml + xml, gerá-lo com algum método que garante validade.
- 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