У меня есть этот код javascript, делающий мои клики, и он должен включать правильное отслеживание кликов. clickDestinations все разные, и их много (перекрестный домен).
var response = window.open(clickDestination, randomName);
if (typeof response.focus === 'function') {
alert('tracking this click-out');
}
Проблема с этой реализацией заключается в том, что clickDestination был предоставлен пользователями, а некоторые из них очень старые, поэтому нет гарантии, что протокол HTTP или https установлен правильно.
Когда window.open вызывается с неправильным протоколом, например. с https на сайтах, где https не поддерживается, я получаю страницу "Этот сайт не может быть достигнут" (ERR_CONNECTION_CLOSED). Но мой трекер отслеживает все равно, так как ответ var - это объект окна.
Любые идеи, как я могу обнаружить ошибку, а не отслеживать в этом случае?
Первая идея действительна, если url находится в одном домене (здесь применяется одна и та же политика происхождения):
var w = window.open(url);
// if window opened successfully
if ( w ) {
w.onload = function() {
alert('tracking this click-out');
};
}
Вторая идея:
window.open
возвращает ссылку на вновь созданное окно. Если вызов завершился неудачно, он будет равенnull
. Ref.
Поэтому в случае сбоя соединения, поскольку сервер с указанным URL-адресом не поддерживает https, или будет возвращен HTTP- null
, чтобы вы могли использовать эту информацию, чтобы пропустить код отслеживания.
Пример (не проверен):
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');
}