Ошибка типа: незаконный вызов в pubads_impl_XXX.js в мобильном сафари

#javascript

#javascript

Вопрос:

У меня есть веб-сайт с двойным щелчком мыши. В Sentry (отслеживание ошибок) есть некоторые ошибки в pubads_impl_xxx.js , но только в мобильном сафари. Почему это так? Должен ли я игнорировать их или есть какой-то способ их исправить?

Спасибо

 TypeError: Illegal invocation
  at HTMLDocument.document.createEvent(:1:40918)
  at Wc.l(/gpt/pubads_impl_2020101501.js:6:89381)
  at $c(/gpt/pubads_impl_2020101501.js:6:15725)
  at bd.next(/gpt/pubads_impl_2020101501.js:6:16017)
  at ? (/gpt/pubads_impl_2020101501.js:6:29861)
  at new Promise(<anonymous>)
  at Xa(/gpt/pubads_impl_2020101501.js:6:29629)
  at Po.jn.dispatchEvent(/gpt/pubads_impl_2020101501.js:6:89295)
  at cz._.q.Yb(/gpt/pubads_impl_2020101501.js:6:262763)
  at Object.<anonymous>(/gpt/pubads_impl_2020101501.js:6:120833)
  

Комментарии:

1. Павел, у меня нет мобильного Safari, но я знаю, что CreateEvent устарел. Возможно, Mobile Safari уже удалил его поддержку. Можете ли вы попробовать использовать конструктор событий? Смотрите больше здесь: developer.mozilla.org/en-US/docs/Web/API/Document/createEvent

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

3. @LajosArpad Сценарий взят из doubleclick от Google — securepubads.g.doubleclick.net/gpt/pubads_impl_2020102201.js так что я не могу это изменить. Мне просто любопытно, почему это происходит и как этого избежать (или если я должен игнорировать это: D)

4. Он удален, но по документации webkit он должен работать developer.apple.com/documentation/webkitjs/document /…

Ответ №1:

Похоже, это известная ПРОБЛЕМА 1811 sentry-javascript и связана с blacklistUrls тем, что она не работает в мобильном Safari iOS9.

Предлагаемое решение — либо обновить blacklistUrls , чтобы использовать регулярное выражение, либо обработать проверку в beforeSend обратном вызове.

В коде, прикрепленном к проблеме, ошибка произошла из-за сканеров Facebook, вы можете выполнить аналогичную проверку, чтобы узнать, какой URL-адрес используют сканеры Google.

 Sentry.init({
  beforeSend: function (event) {
    // Drop all events if query string includes `fbclid` string
    if (location.search.indexOf('fbclid') !== -1) return null;
    // Otherwise just let it though
    return event;
  }
});
  

Комментарии:

1. Спасибо, поскольку это происходит только в мобильном Safari, я также добавил проверку UA для iOS.

2. Но fbclid также присутствует, если это реальный пользователь, пришедший с Facebook, я не прав?