Политика безопасности контента версии 3 в манифесте расширения Chrome

Я пытаюсь загрузить (ввести) на страницу код javascript. Файл javascript является локальным по отношению к расширению. путь к файлу - js / somefile.js.

      const basePath = chrome.runtime.getURL('');
    fetch(chrome.runtime.getURL(filePath), { mode: 'same-origin' }) // <-- important
      .then((_res) => _res.blob())
      .then((_blob) => {
        const reader = new FileReader();
        reader.addEventListener('loadend', (data) => {
          callback(data.currentTarget.result, basePath);
        });
        reader.readAsText(_blob);
      });

const scriptTag = document.createElement('script');
    scriptTag.innerHTML = scriptText;
    scriptTag.type = 'text/javascript';
    const scriptElement = document[injectLocation].appendChild(scriptTag);
    if (removeImmediately) document[injectLocation].removeChild(scriptElement);

Мои доступные в Интернете ресурсы:

      "web_accessible_resources": [{
    "resources": [
    "js/*.js",
    ],
    "matches": ["<all_urls>"]
  }],

"content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'self'",
    "sandbox": "sandbox allow-scripts; script-src 'self' 'https://apis.google.com/' 'https://www.gstatic.com/' 'https://*.firebaseio.com' 'https://www.googleapis.com' 'https://ajax.googleapis.com'; object-src 'self'"
  },

Я получаю следующую ошибку:

      Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-Wq/CW2mxkri68TjkuaA0+LnU0capVpyiEuSA5NOVNfU='), or a nonce ('nonce-...') is required to enable inline execution.

2 ответа

Вы можете устранить встроенную ошибку выполнения, изменив к , не нужно загружать скрипт. Кажется, что Manifest v3 позволяет только вставлять статические скрипты в контекст страницы.

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

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

Другие вопросы по тегам