4 votes

le fichier html.ts s'exécute deux fois dans mon projet moovweb

Je rencontre un problème où le fichier html.ts est exécuté deux fois sur certaines pages, même si AJAX est désactivé dans le navigateur. Il ne semble pas s'agir d'un problème de mappage, car ce comportement se produit même si je commente tous les mappages. La page s'affiche correctement dans le navigateur Chrome.

6voto

wonj Points 81

Si rien n'est inséré dans la page par AJAX ou autre, cela est probablement dû à un code html mal formé. S'il y a quelque chose dans la source en dehors de <head> , <body> o <html> Gokogiri emballe le balisage périphérique dans un fichier séparé. <html> étiquette. Puis, comme il y a deux balises d'ouverture et de fermeture <html> le fichier html.ts sera exécuté deux fois. La solution est d'attraper la page entrante avant de dire à Gokogiri ce qu'il doit en faire, et de réparer le html cassé en s'assurant que tout est enveloppé dans la balise <body> étiquette.

Dans scripts/main.ts dans votre dossier de projet, après

match($content_type) {
  with(/html/) {

ajoutez ceci, qui supprime le </body> y </html> et les ajoute à la fin :

  # wrap markup that is outside the body so tritium doesn't get applied twice
  replace(/\<\/body\>/,"")
  replace(/\<\/html\>/,"")
  append("</body> </html>")

Cela devrait garantir qu'il n'y a qu'une seule ouverture et fermeture. <html> qui est passé à Gokogiri et que html.ts n'est exécuté qu'une seule fois comme nous le voulons !

La raison pour laquelle la source a probablement l'air correcte dans Chrome est que lorsque le code Tritium manipule la page, il déplace des éléments des deux côtés de la page. <html> dans la première, et lorsque Chrome recevra la page, il effacera la seconde balise vide <html> étiquette.

2voto

nmakiya Points 316

Il se peut aussi qu'il y ait deux <html> pour commencer ! Et celles-ci sont sélectionnées dans votre fichier html.ts. Puisque le fichier html.ts commence par le sélecteur $("/html") { Si c'est le cas et qu'il y a deux <html> alors le code sera exécuté deux fois.

Vérifiez la présence d'iframes sur la page qui pourraient être la cause de ce problème !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X