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.
Réponses
Trop de publicités?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.
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 !