У меня есть вопрос о том, как ответ предоставляется. Я заметил, что многие HTML-коды, кажется, работают в предварительном просмотре ответа, но не отображают окончательный ответ. Почему они заблокированы?

У меня есть вопрос о том, как ответ предоставляется. Я заметил, что многие HTML-коды, кажется, работают в предварительном просмотре ответа, но не отображают окончательный ответ. Почему они заблокированы?
Anonim

Короткий ответ: мы используем две разные библиотеки Markdown для визуализации предварительного просмотра и окончательного ответа. Эти две разные библиотеки обрабатывают HTML по-разному.

Наши ответы стилизованы и отформатированы с использованием языка разметки под названием «Markdown». Markdown преобразует предопределенную разметку в HTML для ссылок, изображений, заголовков, курсива, выделений и т. Д.

Не вдаваясь в технические аспекты, наш предварительный просмотр ответа создается в браузере с использованием библиотеки Javascript. Мы делаем это по соображениям скорости.

Когда вы обновляете страницу, ответ уже преобразуется в HTML с помощью нашей библиотеки Python Markdown. Мы делаем это потому, что хотим, чтобы ответ выглядел великолепно, как только вы попадете на страницу. Если мы решили просто вывести необработанный ответ, а затем преобразовать его с помощью нашей библиотеки Javascript, вы сначала заметите «уродливый» необработанный ответ, а затем перейдете к красиво отформатированной версии. Это не так уж и плохо, но проблема в том, что Google и другие боты, которые сканируют наш сайт для поиска, не запускают Javascript. Эти боты всегда будут видеть грубый, безобразный ответ, который может повредить нашему поисковому рейтингу.

Теперь, почему эти две библиотеки по-разному обрабатывают коды HTML? Библиотека Python, отвечающая за окончательный ответ, «ускользает» от HTML, то есть берет эти HTML-коды и заменяет их на безвредный текст. Я говорю «безвредно», потому что вы можете себе представить, что предоставление пользователям возможности вводить HTML на нашей странице может полностью разрушить макет страницы. Библиотека Javascript, отвечающая за предварительный просмотр, НЕ экранирует HTML, что технически является ошибкой.

В будущем нам придется отказаться от возможности библиотеки Javascript для предварительного просмотра HTML-кодов по соображениям безопасности. Мы также перейдем к использованию единой библиотеки для рендеринга всего текста Markdown.