Примечание: Изначально это было опубликовано 6 ноября 2015 г. ~ Увы, моего оригинального блога больше нет 😦 Поскольку люди спрашивали об этой статье и, видя, что она связана с репозиторием, я подумал, что пора принести ее вернуться к жизни.

Два краеугольных камня открытой сети - это выбор и доверие. В последнее время все больше и больше внимания уделяется практике, разрушающей эти краеугольные камни. Я, конечно, имею в виду онлайн-отслеживание, которое осуществляется, среди прочего, компаниями поведенческой рекламы, правительствами, операторами мобильной связи, интернет-провайдерами. Они не только подрывают доверие пользователей, отслеживая их без разрешения, но и не предлагают пользователям выбора в этом отношении.

На самом деле, это даже хуже.

Благодаря работе, инициированной Mozilla, у пользователей есть способ сообщить вышеупомянутым игрокам, что они не хотят, чтобы их отслеживали в Интернете. Этот механизм известен как« Не отслеживать . Рассмотрение механизма работы и реализации Do Not Track выходит за рамки этой публикации. Прочтите статью EFF выше, если хотите узнать подробности.

Этот пост о том, что дает вам простую утилиту JavaScript, которая позволит вам уважать выбор вашего пользователя, соблюдая его статус "Не отслеживать".

Но у меня на сайте нет рекламы, - скажете вы. Что ж, если вы используете такие инструменты, как Google Analytics или Диспетчер тегов Google, для доступа пользователей к статистике или, чтобы отслеживать поведение пользователей, ваши пользователи отслеживаются. Если вы используете Optimizely, для проведения A / B-тестирования на вашем сайте отслеживаются ваши пользователи.

Если вы встраиваете кнопки социальных сетей или используете что-то вроде AddThis для публикации в социальных сетях, ваши пользователи отслеживаются. Даже после того, как они покинули ваш сайт.

Вы также можете увидеть недавнюю статью на Ars Technica о постановлении Федеральной комиссии по связи, согласно которому веб-сайты могут продолжать игнорировать Do Not Tack. Вы даже можете возразить, что у пользователей есть множество вариантов защиты, если они не хотят, чтобы их отслеживали, такие как uBlock, Privacy Badger, Ghostery и, в последнее время, использование Приватного просмотра Firefox с защитой от отслеживания . Но ответственность не должна лежать на пользователе.

Как и в случае с доступностью и хорошим пользовательским интерфейсом, уважение к выбору, сделанному вашими пользователями, является правильным поступком, с положительным побочным эффектом повышения доверия пользователей. С учетом всего сказанного, давайте перейдем к тому, как написано в этой публикации.

В основе этого лежит функция JavaScript, которая возвращает текущий статус флажка Не отслеживать. Таким образом, вы можете использовать это для обертывания, например, ваших скриптов GA.

Вот и все. Теперь вы будете добавлять Диспетчер тегов Google / Google Analytics только в том случае, если текущий пользователь не включил функцию «Не отслеживать».

Технические детали

Давайте рассмотрим некоторые детали, касающиеся реализации помощника. Первая часть фактически получает статус свойства doNotTrack. Теперь это должен быть простой процесс, но из-за различий в браузерах он требует немного больше усилий, чем нужно.

Согласно спецификации Выражение предпочтения отслеживания (DNT), свойство должно быть у объекта navigator, и, таким образом, оно есть в Firefox, Chrome и более новых версиях Opera (с использованием мигания).

Некоторое время, хотя спецификация еще не была рекомендованным стандартом и реализация Microsoft отличалась от проекта, она существовала как свойство с префиксом navigator.msDoNotTrack в Internet Explorer. Так было до тех пор, пока в Internet Explorer 11 Microsoft не решила принять эту спецификацию и не включать режим« Не отслеживать по умолчанию», но они также переместили свойство с navigator на window. И вот мы, прыгая через обруч за обручем, просто получаем значение этого свойства.

Примечание. Это свойство также устанавливается для объекта window в Safari.

Далее нам нужно поговорить о следующей строке:

Как упоминалось выше, был длительный период, когда реализация Microsoft не соответствовала стандарту и по умолчанию включала функцию «Не отслеживать». Это означало, что это больше не было указанием на выбор пользователя. Таким образом, это делает невозможным соблюдение настройки, и именно поэтому нам нужны Arrayповрежденные версии Windows, указанные выше.

Пропуская биты регулярных выражений, мы попадаем в довольно большой условный блок. Затем нам нужно выяснить реальный статус Do Not Track, прежде чем возвращать результат вызывающей стороне. Сначала мы обрабатываем старые версии (lte IE8), в которых этот флаг не существовал.

Нет смысла делать что-либо еще, мы можем просто вернуть false и покончить с этим. Итак, Firefox и здесь не был полностью невиновен:

Для версий Firefox до версии 32 была ошибка с возвращаемым значением свойства doNotTrack. Tl; dr означает, что значение да означало, что пользователь выразил намерение, но не то, что было намерением. Поэтому нам нужно установить возвращаемое значение как Unspecified. Далее следует обработка аномальных версий Windows, в которых для параметра Не отслеживать по умолчанию было установлено значение true.

Как упоминалось ранее, в этих случаях мы не можем доверять настройке флага «Не отслеживать», чтобы она была указана пользователем, и поэтому необходимо установить по умолчанию значение «Не указано», то есть false.

Со всем этим мы можем справиться с последним удачным случаем, когда мы просто используем значение, возвращаемое браузером, но обрабатывая возможные выпадающие случаи, когда значение равно undefined. Осталось только вернуть истину или ложь, если мы еще не вернулись на предыдущем шаге.

Я искренне надеюсь, что люди найдут эту небольшую утилиту полезной и будут использовать ее на своих сайтах. Когда мы уважаем конфиденциальность и выбор наших пользователей, пользователи и открытый Интернет выигрывают, и это всегда хорошо.

Жду ваших комментариев.