2017-07-27 4 views
1

J'ai ce code javascript en train de faire mes clickouts et il devrait permettre un suivi correct du clic. clickDestinations sont tous différents, et ils sont nombreux (domaine croisé).Ce site ne peut être atteint (ERR_CONNECTION_CLOSED) Détection javascript pour window.open

var response = window.open(clickDestination, randomName); 
if (typeof response.focus === 'function') { 
     alert('tracking this click-out'); 
} 

problème avec cette mise en œuvre est le clickDestination a été donnée par les utilisateurs et certaines d'entre elles est très vieux, donc il n'y a aucune garantie que le protocole http ou https est correctement défini.

Lorsque window.open est appelé avec le mauvais protocole, ex. avec https sur les sites où https n'est pas supporté, j'obtiens la page "Ce site ne peut être atteint" (ERR_CONNECTION_CLOSED). Mais mon tracker suit de toute façon puisque var response est un objet fenêtre.

Des idées comment puis-je détecter l'erreur et ne pas suivre dans ce cas?

Répondre

1

première idée valide si l'URL est sur le même domaine (règle d'origine applique ici):

var w = window.open(url); 

// if window opened successfully 
if (w) { 
    w.onload = function() { 
     alert('tracking this click-out'); 
    }; 
} 

Deuxième idée:

window.open renvoie une référence à la fenêtre nouvellement créée. Si l'appel a échoué, ce sera null à la place. Ref.

Donc, dans le cas où la connexion échoue car le serveur à l'adresse spécifiée ne prend pas en charge https ou http null seront retournés afin que vous puissiez utiliser ces informations pour ignorer votre code de suivi.

Exemple (non testé):

var response = window.open(clickDestination, randomName); 
// if destination cannot be open, skip tracking code 
if(!response){ 
    return; 
} 
if (typeof response.focus === 'function') { 
     alert('tracking this click-out'); 
} 
+0

Malheureusement, il est encore un objet de la fenêtre, je reçois un nouvel onglet qui dit: « Ce site ne peut pas être atteint », par exemple dans Chrome. Merci pour votre temps. – Mccandless5

+0

@ Mccandless5 J'ai ajouté une autre idée. J'espère que ça peut être utile. – GibboK

+0

Cette réponse explique tout ce qui peut être fait dans ce cas. – Mccandless5