не может выполнить встроенный обработчик событий, потому что он нарушает директиву Content Security Policy - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь создать расширение будильника / таймера.Никогда ранее не использовал расширения и сталкивался с этим сообщением об ошибке:

"Отказался от выполнения встроенного обработчика событий, поскольку он нарушает следующую директиву политики безопасности содержимого:" script-src 'self' https://apis.google.com". ЛибоКлючевое слово unsafe-inline, хэш ('sha256 -...') или одноразовый номер ('nonce -...') необходимы для включения встроенного выполнения. "

Похоже, что он ссылаетсяк событию 'onended' в моем коде background.js.

Я обнаружил, что это аналогичная проблема:

Как исправить ошибку вызова встроенного JavaScript-расширения Chrome?

Я не уверен, как заставить работать исправления, хотя из-за того, что я новичок.

Я пытался добавить это в свой файл manifest.json, но это не помоглочто-нибудь: "content_security_policy": "script-src 'self' https://apis.google.com; object-src 'self'"

Затем я прочитал кое-что из этого, но не уверен, как на самом деле получить хэш кода:https://www.w3.org/TR/2015/CR-CSP2-20150721/#script-src-hash-usage

Приведенная выше ссылка гласит:

"Вы можете получить дижест строки в командной строке просто через программу openssl "

Я не уверен, где / что программа openssl, хотя.Как мне получить этот хеш?

Как должен выглядеть текст в manifest.json "content_security_policy": для этой хеш-информации?

chrome.runtime.onMessage.addListener(function(response){

  myInterval = setInterval(function(){

  var audio = new Audio("Gentle-wake-alarm-clock.mp3");
  audio.setAttribute("onended",
  "function(){alert('your ' + response + ' second alert has ended')}");
  audio.play();
  clearInterval(myInterval);
  }, response * 1000);

})

мой файл manifest.json:

{
    "name": "timer",
    "version": "1.0",
    "description": "Build a timer!",
    "manifest_version": 2,
    "permissions": ["storage"],
    "options_page": "options.html",

    "browser_action": {
      "default_popup": "timerpopup.html",
      "default_icon": "green alarm.png"
    },

    "background": {
      "scripts": ["background.js"],
      "persistent": false
    },

    "content_security_policy":"script-src 'self' https://apis.google.com; object-src 'self'"


}

1 Ответ

1 голос
/ 02 июня 2019

Может быть проще просто не использовать встроенный обработчик событий и использовать вместо него addEventListener. Вы также можете использовать setTimeout вместо setInterval, чтобы избежать необходимости звонить clearInterval:

chrome.runtime.onMessage.addListener(function(response) {
  myTimeout = setTimeout(function() {
    var audio = new Audio("Gentle-wake-alarm-clock.mp3");
    audio.addEventListener('ended', function() {
      alert('your ' + response + ' second alert has ended');
    });
    audio.play();
  }, response * 1000);
});

Если вы не используете clearInterval / clearTimeout где-либо еще, вы также можете удалить myTimeout =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...