Pergunta

Na semana passada, lançou código de analytics da Omniture para um grande volume de sites depois de mexer e testando para a última semana ou assim.

Em quase todos os nossos modelos de site, ele funciona muito bem. Em algumas situações imprevisíveis, espalhados, há um incapacitante, a experiência do navegador bater que pode afastar alguns usuários.

Nós não somos capazes de ver uma relação entre os modelos que deixam de funcionar neste momento, e enquanto não são várias maneiras para solucionar problemas, o que está nos confuddling está relacionado com ouvintes de eventos.

Os sites de falhar quando qualquer âncora nesses modelos é clicado. Não há nenhum JS em linha, e enquanto nós firebug'ed nosso caminho através dos atributos do HTML, não conseguimos encontrar um loop discernível ou problema que poderia causar isso. (Enquanto nós resolver, você pode experimentar isso por si mesmo aqui [ aviso ! clicar em qualquer link na página fará com que seu navegador para acidente!])

Como você determina se um objeto tem um ouvinte ou não? Como você determina o que será acionado quando o evento é acionado?

FYI, eu adoraria pontos de interrupção conjunto, mas entre Omnitures miseravelmente ofuscado código e repetiu navegador acidentes , eu gostaria de pesquisar mais bem como posso abordar esse.

Foi útil?

Solução

Eu fiz uma "Inspect Element" em um link nessa página com o Firebug, e na guia DOM ele diz que há uma função onclick (anônimo), e também alguma outra função chamada "s_onclick_0".

Eu persuadiu firebug colocando um relógio como

alert(document.links[0].onclick)

para me alertar a função onclick que Omniture (eu acho) atribui à 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;
}

Talvez da mesma forma que você pode ver o que está funcionando realmente depois de tudo que ofuscação.

Outras dicas

DOM não fornece qualquer meio para introspecção através de coleções os eventos dos ouvintes associados a um nó.

A única situação onde ouvinte pode ser identificado é quando ele foi adicionado através da criação de uma propriedade ou um atributo no elemento -. Verificação na propriedade onxxx ou atributo

Houve uma conversa recentemente no grupo WebAPI na W3 sobre a possibilidade de adicionar esta funcionalidade. Especialistas parecem ser contra isso. I compartilhar seus argumentos.

Um conjunto de recomendações aos implementadores de análise on-page:

  • Use evento de nível de documento captura única, isto é, em quase todos os casos (além de alterar / enviar eventos) suficiente

  • Do not executar código-computação intensiva (bem como quaisquer operações de IO) nos manipuladores, em vez adiar a execução com um tempo limite

Se isso duas regras simples são tidos em conta, eu aposto que o seu browser irá sobreviver

Eu tenho alguma experiência com Omniture e olhando para seus s_code.js, você tem várias coisas acontecendo na área de "rastreamento de link", por exemplo:


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

Gostaria de consultar com o pessoal da Omniture e verificar se sua configuração de rastreamento de link está configurado corretamente.

Especificamente, este modelo e os links dentro parecem pertencer a morningsun.net e ainda morningsun.net não está nos s.linkInternalFilters definição. Se você estiver usando o arquivo mesmas s_code.js para vários domínios, você pode usar javascript para definir os valores de configuração para coisas como esta (baseando-se no document.location.hostname por exemplo).

Eu não pessoalmente, tenho experiência com a configuração de rastreamento de link ou eu iria dar-lhe mais detalhes sobre como configurá-lo:)

Ao viajar para casa Eu vim para uma solução que permite a introspecção de manipuladores de eventos no elemento adicionado com addEventListener. Executar código antes da inclusão de seu código de analytics. O código não foi verificado se as obras, mas a idéia, eu acho que é clara. Não vai funcionar no IE, no entanto você pode aplicar técnica semelhante (de reescrever o membro API) lá também.

(function(){
  var fAddEventListener = HTMLElement.prototype.addEventListener;
  HTMLElement.prototype.addEventListener = function() {
   if (!this._listeners)
      this._listeners = [];
   this._listeners.push(arguments);
   fAddEventListener.apply(this, arguments);
  }
})();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top