Eu tenho uma pergunta sobre como a resposta é processada. Tenho notado que muitos códigos HTML parecem funcionar na visualização da resposta, mas não aparecem a resposta final. Por que estes estão bloqueados?

Eu tenho uma pergunta sobre como a resposta é processada. Tenho notado que muitos códigos HTML parecem funcionar na visualização da resposta, mas não aparecem a resposta final. Por que estes estão bloqueados?
Anonim

A resposta curta é que usamos duas bibliotecas Markdown diferentes para renderizar a visualização e a resposta final. Essas duas bibliotecas diferentes tratam HTML de maneira diferente.

Nossas respostas são estilizadas e formatadas usando uma linguagem de marcação chamada "Markdown". O Markdown converte marcações predefinidas em HTML para links, imagens, cabeçalhos, itálicos, ênfases etc.

Sem ficar muito técnico, nossa visualização de resposta é criada no navegador usando uma biblioteca Javascript. Fazemos isso por motivos de velocidade.

Quando você atualiza a página, a resposta já é convertida em HTML usando nossa biblioteca de Markdown do Python. Fazemos isso porque queremos que a resposta fique ótima assim que você chegar à página. Se decidíssemos simplesmente exibir a resposta bruta e, em seguida, convertê-la usando nossa biblioteca Javascript, você notaria primeiro a resposta bruta "feia" e depois saltaria para a versão bem formatada. Isso não é tão ruim, mas o problema é que o Google e outros bots que rastreiam nosso site para pesquisa não executam Javascript. Esses bots sempre veriam a resposta feia e crua que poderia prejudicar nosso ranking de busca.

Agora, por que essas duas bibliotecas tratam os códigos HTML de maneira diferente? A biblioteca Python responsável pela resposta final "escapa" do HTML, o que significa que ele pega esses códigos HTML e os altera para um texto inofensivo. Eu digo inofensivo porque você pode imaginar permitir que os usuários insiram HTML em nossa página pode destruir completamente o layout da página. A biblioteca Javascript responsável pela visualização NÃO sai do HTML, o que é tecnicamente um bug.

No futuro, teremos que remover a capacidade da biblioteca Javascript de visualizar códigos HTML por motivos de segurança. Também vamos passar a usar uma única biblioteca para renderizar todo o texto do nosso Markdown.