Pergunta

Eu tenho um monte de links que usam um target = "_ blank" atributo para abrir em uma nova janela. Eu quero anexar rastreamento objetivo do Google Analytics para cliques desses links.

Para fazer isso, eu tentei ligar um atributo onclick = "pageTracker._trackPageview ( '/ evento / saída')" para as ligações.

Mas descobri que para as ligações com um target = "_ blank" atributo, evento do Javascript onclick fica ignorado. Assim, o objetivo não é gravado. Em outras palavras, este link registra com sucesso a meta:

<a href="http://www.yahoo.com" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

Mas isso não:

<a href="http://www.yahoo.com" target="_blank" onclick="pageTracker._trackPageview('/event/outgoing')">Click me</a>

Alguém sabe por que isso pode estar ocorrendo? Assumindo que não há uma solução fácil, eu suponho que vou ter que usar o Javascript para resolver o problema. O código a seguir registra com sucesso um objetivo (mas não abre o link):

function attach_goal_tracking() {
    var links = document.getElementsByClassName("buyTicketsLink");
    for(var i=0; i<links.length; i++) {
        links[i].onclick = record_goal;
        }
}

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
}

Mas quando eu adicionar à função record_goal para abrir o link ...

function record_goal(e) {
    e.stop();
    pageTracker._trackPageview('/event/outgoing');
    var newWindow = window.open(this.getAttribute('href'), '_blank');
    newWindow.focus();
    }

... então ele não conseguir acompanhar o objetivo.

Alguém pode me dizer por que isso pode ser, e o que devo fazer para contornar este problema? FYI Estou usando Prototype para JavaScript.

Foi útil?

Solução

Pode haver um problema com bloqueadores de pop-up (estou pensando Googlebar) parar a janela de abertura, e (com a presença de onclick) impedindo o código onclick de execução. Por exemplo, ver este e este emite som semelhante outras pessoas estão tendo.

Ou pode ser simplesmente que o código de manipulador de clique está jogando um erro que, em seguida, impede que o resto do código de concluir. Ver o meu comentário à sua pergunta re como você está ligando os eventos. e.stop() pode estar falhando no IE.

A sua hipótese, porém, é falsa. target="_blank" e onclick="..." fazer um trabalho em conjunto muito bem.

Testcase no ponto: http://jsbin.com/anahe (add /edit para a url para editar o código). Pode ser necessário desligar o bloqueador (s) pop-up :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Sandbox</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<script>var clickCount= 0;</script>
</head>
<body>
  <a href="http://www.google.com" target="_blank" onclick="document.getElementById('dbg').innerHTML = ++clickCount">
     open new
  </a>
  <div id="dbg"></div>
</body>
</html>

Ao clicar no link abre uma nova janela e atualiza o div com o número de vezes que o vinculadas foi clicado. Testado esta no IE6, IE7, FF2, FF3.5, Chrome 2, Chrome 3, Opera 9.

Outras dicas

É possível, Victor é certo o e.stop () é uneccessary, posso confirmar que o código a seguir com êxito abre uma nova guia, e de forma assíncrona alertas na guia antiga (consequentemente tornando-se recuperar o foco).

<a href="" target="_blank">reload</a>

<script>

var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
    var a = as[i];
    a.onclick = function(e) {
        setTimeout(function() {
            alert('hi hi');
        }, 1000);
    }
}

</script>

A próxima melhor coisa é ter uma página link de monitoramento e via todos os seus links externos através dessa página.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top