Table of contents

Что такое Script error.

Script error. — это «обезличенная» ошибка JavaScript, которую браузер отдает при падении кросс-доменного скрипта (или скрипта в кросс-доменном окружении — например, внутри <iframe>), когда нельзя раскрывать детали из-за политики безопасности.

Вместо реального сообщения вы видите строку Script error. и пустой stack trace.

Хоук ловит исключение, но т.к. источник — другой домен — и нет корректных настроек CORS/crossorigin, браузер блокирует доступ к исходной ошибке.

Рассмотрим наиболее частые причины: 

  • Скрипт грузится с другого домена или CDN без CORS. Нет заголовка Access-Control-Allow-Origin на сервере скрипта и/или нет атрибута crossorigin в <script>.
  • Ошибка внутри кросс-доменного <iframe>.
  • Ошибка внутри расширения браузера 
  • CSP/AdBlock ломают загрузку или выполнение ресурса кросс-доменно. 
  1. Настроить CORS для внешних ресурсов с помощью атрибута crossorigin="anonymous" у тега <script> или заголовков Access-Control-Allow-Origin и Access-Control-Allow-Credentials на CDN сервере.
  2. Включите ресурсы, загружаемые с внешних источников, в сборку. 
  3. Отфильтруйте (игнорируйте) ошибку в Хоуке

Остановимся подробнее на последнем пункте. Во многих случая исправить ошибку Scipt error. не представляется возможным. Поэтому распространенная практика — отключить отправку этой ошибки в Хоук

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

  1. Убрать чувствительные данные
  2. Полностью отменить отправку ошибки

Вторая возможность нам и нужна. Для этого нужно вернуть false в beforeSend:

import Hawk from '@hawk.so/javascript'; const hawkInstance = new Hawk({ // other initial settings beforeSend: (event) => { const titleIgnorePatterns = [ + 'Script error.', ]; if (titleIgnorePatterns.includes(event.title.trim())) { return false; } return event; }, });

Готово, вы больше не буду получать отчеты об этом событии.