Jeg har et spørsmål om hvordan svaret blir gjort. Jeg har lagt merke til at mange HTML-koder ser ut til å fungere i forhåndsvisning av svaret, men ikke vises det endelige svaret. Hvorfor er disse blokkert?

Jeg har et spørsmål om hvordan svaret blir gjort. Jeg har lagt merke til at mange HTML-koder ser ut til å fungere i forhåndsvisning av svaret, men ikke vises det endelige svaret. Hvorfor er disse blokkert?
Anonim

Det korte svaret er at vi bruker to forskjellige Markdown-biblioteker for å gjøre forhåndsvisningen og det endelige svaret. Disse to forskjellige bibliotekene behandler HTML annerledes.

Våre svar er utformet og formatert ved hjelp av et oppslagsspråk som heter "Markdown." Markdown konverterer forhåndsdefinert markup til HTML for koblinger, bilder, overskrifter, kursiv, emner, etc.

Uten å bli for teknisk, blir vårt svar forhåndsvisning opprettet i nettleseren ved hjelp av et Javascript-bibliotek. Vi gjør dette av hastighetshensyn.

Når du oppdaterer siden, er svaret allerede konvertert til HTML ved hjelp av vårt Python Markdown-bibliotek. Vi gjør dette fordi vi vil at svaret skal se bra ut så snart du kommer til siden. Hvis vi bestemte oss for å bare sende det røde svaret og deretter konvertere det ved hjelp av Javascript-biblioteket, vil du først se det "stygge" raske svaret og deretter et hopp i den pent formaterte versjonen. Det er ikke så ille, men problemet er at Google og andre bots som gjennomsøker nettstedet vårt for søk, ikke kjører Javascript. Disse bots ville alltid se det røde, gale svaret som kunne skade vår søkrangeringsgrad.

Nå, hvorfor behandler disse to bibliotekene HTML-koder annerledes? Python-biblioteket ansvarlig for det endelige svaret "unnslipper" HTML, noe som betyr at det tar disse HTML-kodene og endrer dem til ufarlig tekst. Jeg sier harmløs fordi du kan forestille deg at brukerne kan legge inn HTML i vår side, kan helt ødelegge layoutet på siden. Javascript-biblioteket som er ansvarlig for forhåndsvisning, unnslipper ikke HTML, noe som er teknisk en feil.

I fremtiden må vi fjerne Javascript-bibliotekets evne til å forhåndsvise HTML-koder av sikkerhetshensyn. Vi flytter også til å bruke et enkelt bibliotek for å gjengi all vår Markdown-tekst.