Domanda

La settimana scorsa abbiamo rilasciato il codice analitico di Omniture su un ampio volume di siti Web dopo aver armeggiato e testato l'ultima settimana circa.

Su quasi tutti i nostri modelli di siti, funziona perfettamente. In alcune situazioni sparse e imprevedibili, c'è una paralizzante esperienza di blocco del browser che potrebbe allontanare alcuni utenti.

Al momento non siamo in grado di vedere una relazione tra i modelli di arresto anomalo e mentre sono in molti modi per risolvere i problemi, quello che ci confonde è legato ai listener di eventi.

I siti si arrestano in modo anomalo quando si fa clic su un'ancora su questi modelli. Non esiste alcun JS in linea e, mentre abbiamo eseguito il firebug attraverso gli attributi dell'HTML, non siamo riusciti a trovare un loop o un problema riconoscibile che potrebbe causare questo. (mentre risolviamo i problemi, puoi provare questo da soli qui [ avviso ! facendo clic su un collegamento nella pagina, il browser si bloccherà!])

Come si determina se un oggetto ha un ascoltatore o no? Come si determina cosa verrà generato quando viene attivato l'evento?

  

Cordiali saluti, mi piacerebbe impostare punti di interruzione, ma    tra Omnitures codice miseramente offuscato e browser ripetuto   si arresta in modo anomalo , vorrei effettuare ulteriori ricerche   accuratamente come posso affrontare questo.

È stato utile?

Soluzione

Ho fatto un "elemento di ispezione" su un link in quella pagina con firebug, e nella scheda DOM dice che c'è una funzione onclick (anonimo), e anche qualche altra funzione chiamata " s_onclick_0 " ;.

Ho indotto il firebug a posizionare un orologio come

alert(document.links[0].onclick)

per avvisarmi della funzione onclick che omniture (immagino) allega ai link:

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;
}

Forse allo stesso modo puoi vedere cosa sta realmente succedendo dopo tutta quell'offuscamento.

Altri suggerimenti

DOM non fornisce alcun mezzo per introspezione attraverso le raccolte dei listener di eventi associate a un nodo.

L'unica situazione in cui il listener può essere identificato è quando è stato aggiunto impostando una proprietà o un attributo sull'elemento - controlla la proprietà o l'attributo onxxx.

Di recente si è parlato sul gruppo WebAPI di W3 sull'opportunità di aggiungere questa funzionalità. Gli specialisti sembrano essere contrari. Condivido i loro argomenti.

Una serie di raccomandazioni per gli implementatori dell'analisi in-page:

  • Utilizza solo l'acquisizione di eventi a livello di documento, ciò è quasi sempre sufficiente (oltre a eventi di modifica / invio)

  • Non eseguire codice ad alta intensità di calcolo (così come qualsiasi operazione IO) nei gestori, piuttosto rimandare l'esecuzione con un timeout

Se vengono prese in considerazione queste due semplici regole, scommetto che il tuo browser sopravviverà

Ho una certa esperienza con Omniture e guardando il tuo s_code.js, hai molte cose in corso nel " Link Tracking " area, ad esempio:


/* 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"

Mi consulterei con le persone di Omniture e verificherei che la configurazione del monitoraggio dei collegamenti sia impostata correttamente.

In particolare, questo modello e i collegamenti all'interno sembrano appartenere a morningsun.net e tuttavia morningsun.net non si trova nell'impostazione s.linkInternalFilters. Se si utilizza lo stesso file s_code.js per più domini, è possibile utilizzare JavaScript per impostare i valori di configurazione per cose come questa (basandosi sul document.location.hostname per esempio).

Personalmente non ho esperienza con la configurazione del monitoraggio dei collegamenti o ti darei maggiori dettagli su come configurarlo :)

Durante il viaggio verso casa sono arrivato a una soluzione che consente l'introspezione dei gestori di eventi sull'elemento aggiunto con AddEventListener. Esegui il codice prima dell'inclusione del tuo codice analitico. Il codice non è stato verificato se funziona, ma l'idea, suppongo sia chiara. Non funzionerà in IE, tuttavia è possibile applicare anche una tecnica simile (di riscrittura del membro API).

(function(){
  var fAddEventListener = HTMLElement.prototype.addEventListener;
  HTMLElement.prototype.addEventListener = function() {
   if (!this._listeners)
      this._listeners = [];
   this._listeners.push(arguments);
   fAddEventListener.apply(this, arguments);
  }
})();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top