Этот сайт не может быть достигнут (ERR_CONNECTION_CLOSED) обнаружение JavaScript для window.open

1

У меня есть этот код 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 - это объект окна.

Любые идеи, как я могу обнаружить ошибку, а не отслеживать в этом случае?

Теги:
http
https
protocols
cross-domain

1 ответ

1
Лучший ответ

Первая идея действительна, если 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');
}
  • 0
    К сожалению, это все еще объект окна, я получаю новую вкладку с надписью «Этот сайт не доступен», например, в Chrome. Спасибо за уделенное время.
  • 0
    @ Mccandless5 Я добавил еще одну идею. Я надеюсь, что может быть полезным.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню