Preview checker: `<meta>` tags inside a `<script>` string override the real ones

Ouverte Adaptée aux débutants
#394 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
84/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
typescript
Domaine
backend

Piste de recherche

Commencez par parseMetaTags() dans src/lib/meta-fetcher.ts et les tests de ce parseur. Vérifiez comment les commentaires sont supprimés, puis couvrez les éléments script avec des attributs et une casse mixte, notamment JSON-LD et plusieurs scripts. Ajoutez un test de régression montrant que les balises à l’intérieur des scripts n’affectent pas les résultats du titre, des métadonnées ou du canonical, tandis que les balises en dehors des scripts sont analysées comme avant.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug good first issue

parseMetaTags() in src/lib/meta-fetcher.ts strips HTML comments before it looks for tags (#389), but it still reads tags out of <script> contents. In HTML a script's contents are plain text, so a browser never sees tags written inside a JavaScript string, but the checker does, and a later meta tag overwrites an earlier one:

parseMetaTags(`
  <meta property="og:title" content="Pricing | Acme">
  <script>const share = '<meta property="og:title" content="Untitled">';</script>
`, 'https://example.com').ogTitle
// "Untitled"

It goes the other way for the tags where the first one wins: a <title> or <link rel="canonical"> inside a script before the real ones is picked instead, so a page gets Draft and https://acme.dev/draft instead of Pricing | Acme and https://acme.dev/pricing.

What to do

  • Remove <script> elements with their contents (any attributes, any case) right after the comments are stripped, so everything below works on HTML without them. A non-greedy match up to the first </script> is enough, since that's where HTML ends a script too.

Acceptance criteria

  • A <title>, <meta> or <link> inside a <script>, before or after the real tag, never changes the result
  • Tags outside scripts parse the same as today, including a page with several scripts and a <script type="application/ld+json">
  • A test that fails on the current code
  • npm run check, npm run test and npm run build pass

Want to work on this? Comment below and I'll assign it to you. Please take one issue at a time, branch off dev, and open your PR against dev with Closes #NUM in the description.

Langage dominant
TypeScript
Étoiles
8
Forks
4
Merge moyen
8 h 44 min
PR mergées (30 j)
159

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de codercops/ogcops

Toutes les issues de codercops/ogcops

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.