Отказался выполнять встроенный скрипт, потому что он нарушает следующий CSP, расширение Chrome - PullRequest
0 голосов
/ 15 февраля 2019

Мы пытаемся внедрить Google Analytics в наше расширение Chrome.Мы сделали следующие шаги:

Наш manifest.json был отредактирован так:

"Content-Security-Policy": "default-src 'self'; script-src 'nonce-4AEemGb0xJptoIGFP3Nd'",

И наш index.html:

<head>

  <meta charset="utf-8">
  <script>
    window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
    ga('create', 'XXXXX', 'auto');
    ga('send', 'pageview');
</script>
<script async src='https://www.google-analytics.com/analytics.js' nonce="4AEemGb0xJptoIGFP3Nd"></script>

<!-- End Google Analytics -->
</head>

Мы пытались использовать хеш, nonce и unsafe inline, но все дали этот код ошибки:

enter image description here

У меня нет идей.

1 Ответ

0 голосов
/ 15 февраля 2019

Google предоставляет руководство по добавлению GA в расширения Chrome :

Установка кода отслеживания

Стандартный фрагмент кода отслеживания Google Analytics извлекает файл с именемga.js с URL-адреса, защищенного SSL, если текущая страница была загружена с использованием протокола https://.Расширения и приложения Chrome могут использовать только защищенную SSL версию ga.js.Загрузка ga.js через незащищенный HTTP запрещена политикой безопасности содержимого Chrome по умолчанию.Это, а также тот факт, что расширения Chrome размещаются по схеме chrome-extension://, требуют небольшого изменения обычного фрагмента отслеживания для извлечения ga.js непосредственно из https://ssl.google -analytics.com / ga.js вместо местоположения по умолчанию.

Ниже приведен измененный фрагмент для API асинхронного отслеживания (измененная строка выделена жирным шрифтом):

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = 'https://ssl.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

Также необходимо убедиться, что ваше расширение имеетдоступ к загрузке ресурса путем ослабления политики безопасности содержимого по умолчанию.Определение политики в вашем manifest.json может выглядеть следующим образом:

{
  ...,
  "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'",
  ...
}

Вот всплывающая страница (popup.html), которая загружает асинхронный код отслеживания через внешний файл JavaScript (popup.js) и отслеживаетпросмотр одной страницы:

<!DOCTYPE html>
<html>
  <head>
    ...
    <script src="popup.js"></script>
  </head>
  <body>
    ...
  </body>
</html>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
_gaq.push(['_trackPageview']);

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = 'https://ssl.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
...