Ваш cookie файл не соответствует стандарту javascript объектной нотации всемирной паутины жетона

Обновлено: 06.07.2024

Код gtag.js использует файлы cookie для идентификации пользователей во время разных сеансов. Из этой статьи вы узнаете, как настроить параметры файла cookie.

Настройка полей файла cookie

В таблице ниже показаны значения полей по умолчанию в файлах cookie библиотеки gtag.js.

Имя поля Значение Значение по умолчанию
cookie_domain string auto
cookie_expires integer 63072000 (два года в секундах)
cookie_prefix string _ga
cookie_update boolean true
cookie_flags string

Чтобы изменить какое-либо из этих значений, укажите нужный вариант в списке параметров в команде config ресурса. Пример:

Конфигурация домена cookie

Чтобы отключить автоматическую конфигурацию домена cookie, укажите значение параметра cookie_domain в команде config ресурса:

Префикс файла cookie

Чтобы избежать конфликтов с другими файлами cookie, необходимо изменить префикс файла cookie. Он будет добавлен к файлам cookie, заданным с помощью gtag.js. Например, допустим, что для файла cookie идентификатора Google Аналитики задано название по умолчанию _ga . Следующий код изменит это название на example_ga :

Срок действия файла cookie

Срок действия файла cookie обновляется при каждой загрузке страницы: к текущему времени прибавляется значение поля cookie_expires . Таким образом, если в качестве значения cookie_expires задана одна неделя и пользователь заходит на сайт с помощью одного браузера в течение пяти дней, файл cookie будет доступен в течение дополнительной недели, а посещения будут отображаться в Google Аналитике как посещения одного пользователя. Если тот же пользователь заходит на сайт после истечения срока действия исходного файла cookie, создается новый файл cookie, а первое и второе посещения отображаются в Google Аналитике как посещения разных пользователей.

Если вы зададите для поля cookie_expires значение 0 (ноль секунд), то файл cookie будет действовать только в течение текущего сеанса.

Обновление файла cookie

Если для cookie_update задано значение true (значение по умолчанию), gtag.js будет обновлять файлы cookie при каждой загрузке страницы. При этом срок действия файла cookie будет установлен по самому последнему посещению сайта. Таким образом, если срок действия файла cookie равен одной неделе и пользователь заходит на сайт с помощью одного браузера каждые пять дней, срок действия файла cookie будет обновляться при каждом посещении и, следовательно, не истечет никогда.

Если задано значение false , файлы cookie не обновляются при каждой загрузке страницы. Срок действия файла cookie задается относительно первого посещения сайта.

Метки файлов cookie

Дополнительные метки, которые добавляются при создании файлов cookie. Метки необходимо перечислить через точку с запятой.

Как задать User ID

User ID – это уникальный постоянный анонимный строковый идентификатор, который присваивается каждому пользователю. С его помощью можно идентифицировать ряд сеансов одного и того же пользователя на разных устройствах. Подробнее о преимуществах User ID…

Чтобы настроить User ID с помощью gtag.js, измените команду config для ресурса:

Как настроить алгоритм работы тегов с учетом согласия

Вы можете запретить тегу gtag.js читать или записывать файлы cookie, пока пользователь не подтвердил, что он не возражает против этого. Подробнее…

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Мне было интересно, почему нельзя установить заголовки cookie , используя setRequestHeader. Есть ли какая-то конкретная причина или просто они добавляются самим браузером, поэтому эти заголовки отключены? Есть ли проблемы с безопасностью?

Здесь мне нужно установить cookie-заголовок, поскольку node.js' xmlhttprequest не добавляет явно cookie-заголовок (как это делают браузеры). При попытке сделать это xmlhttprequest выдает ошибку " Refused to set unsafe header ".

Я уверен, что вы прошли бы рабочий проект и нашли

Указанные выше заголовки контролируются пользовательским агентом, чтобы позволить ему контролировать эти аспекты транспорта.

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

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

Я столкнулся с несколькими проблемами:

Я думаю, что эти ответы недостаточно полны.

Как и во всех ответах, вы не можете использовать xhr.setRequestHeader('Cookie', "key=value"); для отправки каких-либо данных из-за целостности безопасности (браузер не может определить, является ли добавляемое вами значение настоящим cookie).

Ожидаемый способ работы с этим специальным заголовком - позволить клиентскому браузеру автоматически принимать все файлы cookie, относящиеся к запрашиваемому вами сайту, и помещать их в заголовок «Cookie», вам больше ничего не нужно делать, если ваши файлы cookie существуют в вашем браузере, они будут отправлены.

Как известно, для браузеров необходимо тщательно управлять файлами cookie (помимо прочих свойств), чтобы не допустить кражи пользовательских сеансов (или других данных) третьими лицами. Это проблема браузеров и неконтролируемого характера посещения веб-сайта с произвольным Javascript.

Конечно, этот риск выполнения произвольного кода является низким или не рискованным для node.js, поскольку вы запускаете только тот сценарий, который вы написали, который может выполнять другой код, который вы запланировали.

Это ответит на ваш конкретный вопрос о том, почему ограничение особенно применимо к этому сценарию, используемому для node.js - кодер следовал спецификации (как можно точнее), несмотря на то, что это ощущение, вероятно, не было обязательной мерой безопасности в node.js. Тем не менее этот уровень безопасности по умолчанию легко изменяется.

Как указал Робертклеп, эту меру предосторожности по умолчанию можно отключить с помощью метода setDisableHeaderCheck . И да, этот последний пункт действительно отвечает или значительно способствует ответу на ваш вопрос, потому что в своем вопросе вы заявили:

Теперь мы обнаружили, что вам не нужен этот патч.

Вы можете отключить это поведение:

Когда вы отправляете xmlhttprequest, он читает файлы HttpOnly и отправляет их на сервер через заголовок Cookie . Теперь, если вы делаете xhr.setRequestHeader('Cookie', "key=value"); , вы пытаетесь изменить файлы cookie, отправленные на сервер. setRequestHeader добавит дополнительные key=value , которые могут поставить под угрозу целостность отправленных файлов cookie.

Они используются сервером для аутентификации пользователя (сеанс, электронная почта или любая учетная запись). По сути, это позволяет серверу предотвращать неправильное использование файлов cookie для получения доступа к серверу.

JWT (JSON Web Token) — это замечательный стандарт, основанный на формате JSON, позволяющий создавать токены доступа, обычно используемые для аутентификации в клиент-серверных приложениях. При использовании этих токенов возникает вопрос о том, как безопасно хранить их во фронтенд-части приложения. Этот вопрос нужно решить сразу же после того, как токен сгенерирован на сервере и передан клиентской части приложения.


Материал, перевод которого мы сегодня публикуем, посвящён разбору плюсов и минусов использования локального хранилища браузера ( localStorage ) и куки-файлов для хранения JWT.

Виды токенов

Где именно следует хранить токены на клиенте?

Существует 2 распространённых способа хранения токенов на клиенте: локальное хранилище браузера и куки-файлы. О том, какой способ лучше, много спорят. Большинство людей склоняется в сторону куки-файлов из-за их лучшей защищённости.

Давайте сравним локальное хранилище и куки-файлы. Наше сравнение основано, преимущественно, на этом материале и на комментариях к нему.

Локальное хранилище

▍Преимущества

Основное преимущество локального хранилища заключается в том, что им удобно пользоваться.

  • Работа с локальным хранилищем организована очень удобно, тут используется чистый JavaScript. Если у вашего приложения нет бэкенда, и вы полагаетесь на чужие API, не всегда можно запросить у этих API установку особых куки-файлов для вашего сайта.
  • Используя локальное хранилище, удобно работать с API, которые требуют размещать токен доступа в заголовок запроса. Например — так: Authorization Bearer $ .

▍Недостатки

Главный недостаток локального хранилища — это его уязвимость к XSS-атакам.

  • При выполнении XSS-атаки злоумышленник может запустить свой JavaScript-код на вашем сайте. Это означает, что атакующий может получить доступ к токену доступа, сохранённому в localStorage .
  • Источником XSS-атаки может быть сторонний JavaScript-код, включённый в состав вашего сайта. Это может быть что-то вроде React, Vue, jQuery, скрипта Google Analytics и так далее. В современных условиях почти невозможно разработать сайт, в состав которого не входят библиотеки сторонних разработчиков.

Куки-файлы

▍Преимущества

Главное преимущество куки-файлов заключается в том, что они недоступны из JavaScript. В результате они не так уязвимы к XSS-атакам, как локальное хранилище.

▍Недостатки

В зависимости от конкретных обстоятельств может случиться так, что токены в куки-файлах сохранить не удастся.

  • Размер куки-файлов ограничен 4 Кб. Поэтому, если вы используете большие JWT, хранение их в куки-файлах вам не подойдёт.
  • Существуют сценарии, при реализации которых вы не можете передавать куки своему API-серверу. Возможно и то, что какой-то API требует размещения токена в заголовке Authorization . В таком случае вы не сможете хранить токены в куки-файлах.

XSS-атаки

Куки-файлы и CSRF-атаки

CSRF-атаки — это атаки, в ходе которых пользователя каким-то образом принуждают к выполнению особого запроса. Например, сайт принимает запросы на изменение адреса электронной почты:

Правда, от этой угрозы можно легко защититься, использовав атрибут SameSite в заголовке ответа и анти-CSRF токены.

Промежуточные итоги

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

Использование куки-файлов для хранения токенов OAuth 2.0

Давайте кратко перечислим способы хранения токенов:

Злоумышленник может создать форму, которая обращается к /refresh_token . В ответ на этот запрос возвращается новый токен доступа. Но атакующий не может прочитать ответ в том случае, если он использует HTML-форму. Для того чтобы не дать атакующему успешно выполнять fetch- или AJAX-запросы и читать ответы, нужно, чтобы CORS-политика сервера авторизации была бы настроена правильно, а именно — так, чтобы сервер не реагировал бы на запросы от неавторизованных веб-сайтов.

Как всё это настроить?

Шаг 1: возврат токена доступа и токена обновления при аутентификации пользователя

После того, как пользователь аутентифицируется, сервер аутентификации возвращает access_token (токен доступа) и refresh_token (токен обновления). Токен доступа будет включён в тело ответа, а токен обновления — в куки.

Вот что нужно использовать для настройки куки-файлов, предназначенных для хранения токенов обновления:

Шаг 2: сохранение токена доступа в памяти

Хранение токена доступа в памяти означает, что токен, в коде фронтенда, записывают в переменную. Это, конечно, означает, что токен будет утерян в том случае, если пользователь закроет вкладку, на которой открыт сайт, или обновит страницу. Именно поэтому у нас имеется токен обновления.

Шаг 3: получение нового токена доступа с использованием токена обновления

Если токен доступа оказывается утраченным или недействительным, нужно обратиться к конечной точке /refresh_token . При этом токен обновления, который, на шаге 1, был сохранён в куки-файле, будет включён в запрос. После этого вы получите новый токен доступа, который сможете использовать для выполнения запросов к API.

Всё это значит, что JWT могут быть больше 4 Кб, и то, что их можно помещать в заголовок Authorization .

Итоги

То, о чём мы тут рассказали, должно дать вам базовую информацию о хранении JWT на клиенте, и о том, как сделать ваш проект безопаснее.

JavaScript стал важным звеном в развитии WordPress-приложений (тем и плагинов), а также ядра WordPress. Для форматирования и стилизации кода JavaScript необходимы стандарты, чтобы сохранить ту же согласованность, которую стандарты кодирования WordPress обеспечивают для PHP, HTML и CSS кода.

Cтандарты кодирования JavaScript для WordPress развиты на основе jQuery JavaScript Style Guide. Наш стандарт отличается от руководства для jQuery в следующих моментах:

  • WordPress использует одинарные кавычки для строк.
  • Директивы case сдвигаются на отступ внутри блоков switch.
  • Тело функции всегда оформляется отступом.
  • Есть некоторые отличия в использовании пробелов для согласованности со стандартами кодирования PHP.
  • 100-символьный лимит jQuery приветствуется, но не является строго обязательным.

Многие примеры, приведенные ниже, были адаптированы непосредственно из руководства по стилю кодирования jQuery; указанные выше различия были интегрированы в примеры на этой странице. Приведенные ниже стандарты и примеры должны рассматриваться как лучшие образцы кода для WordPress, если особо не оговорено, что это анти-пример.

Contents

Рефакторинг кода

Многие части JavaScript-кода WordPress не согласованы по стилю. WordPress работает над улучшением ситуации, с тем чтобы код становился чище и читабельнее.

Хотя стандарты кодирования важны, рефакторинг старых .js-файлов только для того, чтобы они соответствовали нормам, не является первостепенной задачей. Чисто стилевые патчи для старых файлов настоятельно не рекомендуются.

Весь новый или обновленный JavaScript-код будет проверяться на соответствие стандартам и тестироваться JSHint.

Интервалы

Активно используйте пробелы в вашем коде. "Если сомневаетесь, ставьте пробел."

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

  • Оформляйте отступы с помощью табуляций.
  • Не используйте пробелы в конце строк и в пустых строках.
  • Строки обычно пишутся не длиннее 80 символов и определенно не должны превышать 100 (считая каждую табуляцию за 4 пробела). Это нежесткое правило, но длинные строки обычно указывают на нечитабельный или плохо организованный код.
  • if/else/for/while/try блоки должны всегда использовать фигурные скобки и располагаться на нескольких строках.
  • Унарные операторы (например, ++, --) не должны иметь пробелов после своих операндов.
  • Перед , и ; не должно быть пробелов.
  • Любая ; как признак конца команды должна быть в конце строки.
  • Перед : после имени свойства в определении объекта не должно быть пробелов.
  • Знаки ? и : в тернарном условном операторе должны иметь пробелы с обеих сторон.
  • В пустых конструкциях (например, <>, [], fn()) не должно быть заполняющих пробелов.
  • Должна быть новая строка в конце каждого файла.
  • За знаком оператора отрицания ! должен идти пробел.
  • Тело функции оформляется отступом в одну табуляцию.
  • Пробелы могут использоваться для выравнивания кода в документированных блоках или в строках, но для отступов в начале строки должны использоваться только табуляции.

Стандарты JavaScript-кода в WordPress предполагают несколько более широкое использование пробелов, чем в стандартах jQuery. Эти изменения приняты для согласованности между PHP и JavaScript-кодом в WordPress.

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

Объекты

Объявление объекта может располагаться на одной строке, если оно достаточно короткое (вспомните о рекомендациях по поводу длины строк). Если объявление объекта слишком длинное и не помещается на одной строке, тогда каждое свойство должно располагаться на отдельной строке. Имена свойств должны заключаться в кавычки только, если они являются зарезервированными словами или содержат специальные символы:

Массивы и вызовы функций

Всегда ставьте дополнительные пробелы вокруг элементов и аргументов:

Примеры правильной расстановки пробелов

Точки с запятой

Используйте их. Никогда не полагайтесь на автоматическую вставку (ASI).

Отступы и переносы строк

Отступы и переносы строк добавляют читабельности для сложных конструкций.

Для отступов должны использоваться табуляции. Даже если весь файл содержится в одной замкнутой структуре (например, в функции), содержимое функции должно иметь отступ в одну табуляцию:

Блоки и фигурные скобки

if, else, for, while, try - блоки должны всегда использовать фигурные скобки, и всегда располагаться на нескольких строках. Открывающая скобка должна быть в одной строке с определением функции, условием или началом цикла. Закрывающая скобка должна быть в строке, непосредственно следующей за последним оператором блока.

Многострочные предложения

Когда предложение слишком длинное для одной строки, переносы строк должны вставляться после операторов.

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

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

Цепочка вызовов методов

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

Присваивания и глобальные переменные

Объявление переменных с помощью var

Каждая функция должна начинаться с объявления переменных с помощью ключевого слова var, за которым через запятую следуют необходимые локальные переменные. Если переменная не объявляется с помощью var, она может проникнуть во внешнюю область (в худшем случае, в глобальную область видимости) и невольно привести к модификации данных.

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

Глобальные переменные

В прошлом код WordPress затруднял использование глобальных переменных. Поскольку JavaScript-файлы ядра иногда используются в плагинах, существующие глобальные переменные не должны удаляться. Все глобальные переменные, используемые в файле, должны быть задокументированы в верхней части этого файла. Несколько глобальных переменных можно перечислить через запятую. Этот пример делает passwordStrength разрешенной глобальной переменной внутри файла:

true после passwordStrength означает, что эта глобальная переменная определяется в пределах этого файла. Если вы обращаетесь к глобальной переменной, определенной в другом месте, опустите :true, чтобы указать, что глобальная переменная используется только для чтения.

Распространенные библиотеки

Это позволяет избежать необходимости вызова .noConflict() или установки псевдонима с помощью другой переменной. Файлы, которые добавляют или изменяют объект wp, должны безопасно обращаться к глобальному объекту, чтобы избежать перезаписи ранее установленных свойств:

Соглашения об именовании

Переменных и имена функций должны быть целыми словами. Используйте camelCase-нотацию со строчной первой буквой. Это область, где этот стандарт отличается от стандартов кодирования PHP в WordPress .

Конструкторы, предназначенные для использования с new, должны иметь прописную первую букву (UpperCamelCase).

Имена должны быть понятными, но не избыточными. Исключения допускаются для итераторов, например, использование i в качестве счетчика в цикле.

Комментарии

Комментарии должны предшествовать коду, к которому они относятся. Перед комментарием должна идти пустая строка. Начинайте комментарий с прописной буквы. Ставьте точку в конце, если комментарий является законченным предложением. Между символом комментария (//) и текстом комментария должен быть один пробел.

Для длинных комментариев используйте многострочные комментарии:

Встроенные комментарии допускаются как исключение для аннотирования специальных аргументов в списке формальных параметров:

Равенство

Строгая проверка на равенство (===) должна использоваться вместо простой проверки (==). Единственным исключением является ситуация, когда осуществляется проверка на undefined или null путем проверки на равенство null.

Проверка типа

Ниже приведены предпочтительные способы проверить тип объекта:

  • Строка: typeof object === 'string'
  • Число: typeof object === 'number'
  • Логический тип: typeof object === 'boolean'
  • Объект: typeof object === 'object' или _.isObject( object )
  • Простой объект: jQuery.isPlainObject( object )
  • Функция: _.isFunction( object) или jQuery.isFunction( object )
  • Массив: _.isArray( object ) или jQuery.isArray( object )
  • Элемент: object.nodeType или _.isElement( object )
  • null: object === null
  • null или undefined: object == null
  • undefined:
    • Глобальная переменная: typeof variable === 'undefined'
    • Локальная переменная: variable === undefined
    • Свойство: object.prop === undefined
    • Любое из вышеперечисленных: _.isUndefined( object )

    Всюду, где используется Backbone или Underscore, рекомендуется использовать проверку типов Underscore.js вместо jQuery.

    Строки

    Используйте одинарные кавычки для строковых литералов:

    Когда строка содержит одинарные кавычки, они должны быть экранированы символами обратной косой черты (\):

    Switch

    Использование конструкции switch, как правило, не рекомендуется, но может быть полезно, когда существует большое количество вариантов case, особенно если несколько вариантов могут быть обработаны в одном блоке, или вариант default может быть использован.

    При использовании конструкции switch:

    • Используйте break; для каждого варианта case, отличного от default. При группировке case отмечайте это явным образом.
    • Сдвигайте варианты case на одну табуляцию по сравнению со switch.

    Не рекомендуется возвращать значение из оператора switch: используйте блоки case, чтобы сохранить значение, а затем в конце верните значение с помощью return.

    Практические рекомендации

    Массивы

    Массивы в JavaScript следует создавать, используя сокращенный конструктор [], а не вызовом new Array().

    Вы можете инициализировать массив при создании:

    В JavaScript ассоциативные массивы определяются как объекты.

    Объекты

    Существует много способов создания объектов в JavaScript. Литеральная нотация <> является как наиболее удобной, так и более читабельной.

    Литеральная нотация объекта должна использоваться, если объект не требует прототипа. Иначе объект должен быть создан с помощью вызова конструктора new.

    Свойства объекта должны быть доступны через точечную нотацию, если ключ не является переменной, зарезервированным словом или строкой, которая не может быть идентификатором:

    Условия Йоды

    Для совместимости со стандартами для PHP-кода когда вы сравниваете объект c величиной типа string, boolean, integer или другой постоянной или литералом, переменная всегда должна располагаться справа, а постоянная или литерал - слева.

    Такую запись немного странно читать. Но делайте так и вы привыкнете.

    Перебор

    При переборе большой коллекции с помощью цикла for, рекомендуется хранить максимальное значение счетчика в заранее вычисленной переменной вместо повторного вычисления максимального значения каждый раз:

    Функции Underscore.js для коллекций

    Изучите методы Underscore для коллекций и массивов. Эти функции, в том числе _.each, _.map , _.reduce, позволяют эффективно и наглядно преобразовывать большие наборы данных.

    Underscore также допускает написание цепочек объектов JavaScript в стиле Query:

    Перебор коллекции jQuery

    Единственный случай, когда jQuery должен использоваться для перебора, - это работа с коллекцией jQuery-объектов:

    Никогда не используйте jQuery, чтобы перебирать исходные данные или обычные объекты JavaScript.

    JSHint

    JSHint - это инструмент для автоматизированной проверки кода, предназначенный для обнаружения ошибок в коде JavaScript. JSHint используется в разработке WordPress для того, чтобы быстро убедиться, что патч не приведет к логическим или синтаксическим ошибкам в клиентских скриптах.

    Инсталляция и запуск JSHint

    JSHint запускается с помощью инструмента Grunt. Как JSHint, так и Grunt являются программами, написанными в Node.js. Конфигурационный файл, который поставляется с кодом WordPress, позволяет легко установить и настроить эти инструменты.

    Чтобы установить Node.js, щелкните ссылку "Install" на сайте Node. Загрузится файл для вашей операционной системы. Выполните все шаги установки для вашей ОС.

    Как только Node.js установится, откройте окно командной строки и перейдите в каталог, где вы проверяете копию SVN-репозитория WordPress (используйте cd

    /directoryname). Вы должны быть в корневом каталоге, который содержит файл package.json.

    Далее введите npm install в командной строке. Будут скачаны и установлены все пакеты Node, которые используются в разработке WordPress.

    Наберите npm install -g grunt-cli, чтобы установить интерфейс командной строки ( Command Line Interface, CLI). Grunt CLI используется, чтобы запускать задачи Grunt в WordPress.

    Теперь вы можете ввести grunt jshint, чтобы выполнить Grunt-проверку всех JavaScript-файлов WordPress'а на синтаксические и логические ошибки. Чтобы проверить только код ядра (core), наберите grunt jshint:core, чтобы проверить только js - файлы тестов, введите grunt jshint:tests.

    Настройки JSHint

    Конфигурационные параметры JSHint хранятся в .jshintrc-файле в SVN-репозитории WordPress. Этот файл определяет, какие ошибки JSHint должен фиксировать, если найдет их в исходном коде WordPress.

    Проверка отдельного файла

    Чтобы проверить отдельный файл, добавьте --file=filename.js в конец команды. Например, чтобы проверить только файл "admin-bar.js" из ядра WordPress, введите:

    А эта команда проверит только файл "password-strength-meter.js" в директории тестов:

    Использование JSHint для проверки отдельных файлов может быть полезно, если вы работаете только с одним-двумя конкретными файлами и не хотите ждать, пока JSHint будет проверять все файлы при каждом запуске.

    Переопределение JSHint: исключение блоков

    В некоторых ситуациях части файла должны быть исключены из проверки JSHint. Например, скрипт для административной панели содержит сжатый код jQuery-плагина HoverIntent, - это сторонний код, который не должен проходить через JSHint, хотя он и является частью JavaScript-файла WordPress.

    Для исключения определенной части кода из проверки JSHint, заключите его в директивные JSHint-комментарии:

    Источники

    Примеры jQuery взяты из jQuery JavaScript Style Guide, который доступен по лицензии MIT.

    Читайте также: