Frage

Letzte Woche veröffentlichten wir Omniture Analytics-Code auf ein großes Volumen von Web-Seiten, die nach basteln und Tests für die letzte Woche oder so.

Auf fast allen unserer Website-Vorlagen, es funktioniert gut. In ein paar verstreute, unvorhersehbaren Situationen gibt es eine lähmend, Browser-Absturz Erfahrung , die kann dreht einige Benutzer weg.

Wir sind nicht in der Lage, eine Beziehung zwischen den tosenden Vorlagen in dieser Zeit zu sehen, und während es sind viele Möglichkeiten, um zu beheben, die eine, die wir ist confuddling auf Ereignis-Listener im Zusammenhang.

Die Websites Absturz, wenn ein Anker auf diesen Vorlagen angeklickt wird. Es gibt keine Inline-JS, und während wir unseren Weg durch die Attribute der HTML firebug'ed konnten wir keine wahrnehmbare Schleife oder ein Problem finden, die dies verursachen würden. (Während wir zu beheben, können Sie erleben diese für sich selbst hier [ Warnung! auf der Seite einen Link zu klicken, wird Ihren Browser zum Absturz bringen!])

Wie bestimmen Sie, ob ein Objekt einen Listener hat oder nicht? Wie bestimmen Sie, was wird ausgelöst, wenn ein Ereignis ausgelöst wird?

  

FYI, ich würde gerne Breakpoints setzen, aber    zwischen Omnitures kläglich verschleierten Code und wiederholt Browser   Abstürze , würde Ich mag mehr erforschen   gründlich wie kann ich diesen Ansatz.

War es hilfreich?

Lösung

Ich habe ein „Element untersuchen“ auf einem Link in dieser Seite mit Firebug, und in dem DOM-Tab sagt, es gibt es eine Onclick-Funktion (anonym), und auch eine andere Funktion „s_onclick_0“ genannt.

Ich schmeichelte firebug eine Uhr platzieren wie

alert(document.links[0].onclick)

Sie mir die Onclick-Funktion zu warnen, dass Omniture (i guess) legt auf Links:

function anonymous(e) {
  var s = s_c_il[0], b = s.eh(this, "onclick");
  s.lnk = s.co(this);
  s.t();
  s.lnk = 0;
  if (b) {
     return this[b](e);
  }
  return true;
}

Vielleicht auf die gleiche Weise können Sie sehen, was es wirklich nach all dem Verschleierungs ausgeführt wird.

Andere Tipps

DOM bietet keine Mittel, um introspecting durch die einem Knoten zugeordnet Sammlungen Zuhörer Ereignisse.

Die einzige Situation, in der Hörer identifiziert werden kann, wenn es eine Eigenschaft durch Einstellung oder ein Attribut auf dem Element hinzugefügt wurde - überprüfen auf onxxx Eigenschaft oder ein Attribut

.

Es hat sich auf einen Vortrag vor kurzem auf WebAPI Gruppe bei W3 gewesen, ob dieser Funktionalität hinzuzufügen. Spezialisten scheinen dagegen zu sein. Ich teile ihre Argumente.

Eine Reihe von Empfehlungen an die Implementierer von On-Page-Analyse:

  • Verwenden Sie Dokumentebene Veranstaltung nur die Erfassung, das ist in fast allen Fällen (außer Änderung / einreichen Ereignisse) ausreichend

  • Sie rechenintensiven Code (sowie alle IO-Operationen) in den Handler nicht ausgeführt, sondern verschieben die Ausführung mit einem Timeout

Wenn diese zwei einfachen Regeln berücksichtigt werden, ich wette, Ihr Browser überleben

Ich habe einige Erfahrung mit Omniture und in Ihrem s_code.js suchen, haben Sie mehrere Dinge in der „Link-Tracking“ Bereich geht, zum Beispiel:


/* Link Tracking Config */
s.trackDownloadLinks=true
s.trackExternalLinks=true
s.trackInlineStats=true
s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,pdf,doc,docx,xls,xlsx,ppt,pptx"
s.linkInternalFilters="javascript:,gatehousemedia.com"
s.linkLeaveQueryString=false
s.linkTrackVars="None"
s.linkTrackEvents="None"

würde ich mit den Leuten bei Omniture konsultieren und sicherstellen, dass Ihre Link-Tracking-Konfiguration richtig eingestellt ist.

Insbesondere diese Vorlage und die Verbindungen innerhalb scheinen morningsun.net zu gehören und doch morningsun.net ist nicht in der s.linkInternalFilters Einstellung. Wenn Sie die gleiche s_code.js Datei für mehrere Domänen verwenden, können Sie Javascript verwenden, um die Konfigurationswerte für Dinge wie diese (gründend auf der document.location.hostname zum Beispiel) zu setzen.

Ich habe nicht persönlich habe Erfahrung mit der Link-Tracking-Konfiguration oder ich würde Ihnen mehr Details geben, wie sie konfigurieren:)

Während der Fahrt nach Hause kam ich zu einer Lösung, die für die Selbstbeobachtung von Event-Handler ermöglicht auf Element mit addEventListener hinzugefügt. Führen Sie Code vor der Aufnahme Ihrer Analytics-Code. Der Code wurde nicht, wenn Werke überprüft, aber die Idee, ich denke, ist klar. Es wird nicht in IE funktionieren, jedoch können Sie ähnliche Technik anwenden (von dem API-Mitglied Umschreiben) auch dort.

(function(){
  var fAddEventListener = HTMLElement.prototype.addEventListener;
  HTMLElement.prototype.addEventListener = function() {
   if (!this._listeners)
      this._listeners = [];
   this._listeners.push(arguments);
   fAddEventListener.apply(this, arguments);
  }
})();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top