2 votes

IE injecte des balises VBScript au milieu de l'affichage, provoquant un HTML malformé.

Pour une raison quelconque, il semble que IE9 (je crois que IE8 aussi, mais je ne suis pas sûr), injecte

<SCRIPT LANGUAGE=VBScript>on error resume next pluginFound = IsObject(CreateObject("DIFFERENT PLUGIN EVERY TIME"))

au milieu de mon contenu sans tenir compte du contexte environnant. Cela signifie qu'il est ajouté au milieu d'un attribut, ou au milieu d'un JavaScript, ce qui entraîne une déformation du HTML et toutes sortes de problèmes.

Cela se produit sur plusieurs ordinateurs avec différents plugins, ce n'est donc pas spécifique à une machine. Et ce n'est pas non plus cohérent : l'emplacement dans lequel le script incriminé est injecté varie, le script incriminé varie. Parfois, plusieurs pages se chargent sans problème, puis le code HTML est cassé.

Developer Tools

Ma page utilise une bonne quantité de JS, mais rien d'extraordinaire. Elle utilise actuellement jQuery, Google Maps, Bootstrap, Google Tag Manager, et charge quelques iframes Twitter, Google+, Facebook avec leurs propres petits extraits JS. Il y a donc quelques rappels asynchrones qui se produisent, mais je ne pense pas que cela puisse interférer avec la façon dont le navigateur rend le DOM et quand il décide d'injecter le code du plugin.

Vous pouvez voir le problème si vous rechargez http://www.rew.ca/properties/search/839721 suffisamment de fois. Si vous faites défiler la page jusqu'en bas, vous verrez du JSON brut, ou parfois un extrait HTML aléatoire s'affichera au milieu de la page (à cause de balises non concordantes).

Une idée de la raison pour laquelle ces scripts sont injectés arbitrairement et comment contourner cela ?

Gracias

[MISE À JOUR] Voici un autre exemple de balises script incluses au milieu d'un contenu HTML : enter image description here

3voto

A mon avis, le problème réside dans le http://cn.clickable.net/js/cct.js script, et plus particulièrement dans la section IsIEPlugin de la méthode __cct_tracker classe :

this.IsIEPlugin = function (e) {
  var t = !1;
  return document.write('<SCRIPT LANGUAGE=VBScript>\n on error resume next \n pluginFound = IsObject(CreateObject("' + e + '")) </SCR' + "IPT>\n"), t ? 1 : 0
}

Cette méthode est appelée plusieurs fois, avec des arguments différents :

this.pixelRequestParams.cctDir = this.IsIEPlugin("SWCtl.SWCtl.1"),
this.pixelRequestParams.cctFlashPlugin = this.IsIEPlugin("ShockwaveFlash.ShockwaveFlash.1");
if (this.IsIEPlugin("PDF.PdfCtrl.1") == 1 || 
    this.IsIEPlugin("PDF.PdfCtrl.5") == 1 || 
    this.IsIEPlugin("PDF.PdfCtrl.6") == 1) 
  this.pixelRequestParams.cctPdf = 1;
this.pixelRequestParams.cctQuickTime  = this.IsIEPlugin("Quicktime.Quicktime"),
this.pixelRequestParams.cctRealPlayer = this.IsIEPlugin("rmocx.RealPlayer G2 Control.1"), 
this.pixelRequestParams.cctWmPlayer   = this.IsIEPlugin("wmplayer.ocx")

Je suppose (même si je n'en suis pas sûr) que "cct" signifie "Clickable Conversion Tracking", il doit donc s'agir d'une sorte de code de suivi.
Après de plus amples investigations, j'ai déterminé que le script "cct.js" est chargé par le programme Gestionnaire de balises Google (GTM) script http://www.googletagmanager.com/gtm.js .
Donc, si je ne me trompe pas, en supprimant l'extrait de code GTM de votre page HTML, vous devriez être en mesure de résoudre le problème.
Il semble que le code VBSCRIPT injecté dynamiquement par le code JavaScript de GTM ne soit parfois pas exécuté, mais ne me demandez pas pourquoi, car je ne le sais pas vraiment.

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