Манифест расширения Chrome V3 удаленно размещенный код

В манифесте расширения Chrome v3 удаленно размещенный код больше не разрешен . В документации по миграции есть два решения.

Функции и логика, управляемые конфигурацией - при таком подходе ваше расширение загружает удаленную конфигурацию (например, файл JSON) во время выполнения и кэширует конфигурацию локально. Затем расширение использует эту кэшированную конфигурацию, чтобы решить, какие функции включить.

Экстернализация логики с помощью удаленной службы - рассмотрите возможность переноса логики приложения с расширения на удаленную веб-службу, которую может вызывать ваше расширение. (По сути, форма передачи сообщений.) Это дает вам возможность сохранять конфиденциальность кода и изменять его по запросу, избегая при этом дополнительных накладных расходов на повторную отправку в Интернет-магазин Chrome.

Кто-нибудь видел образцы этих двух типов конфигураций?

Сначала я пытался возиться с CSP из-за этой ошибки, но теперь не думаю, что это вообще возможно, поэтому ошибка в первую очередь вводит в заблуждение.

      Refused to load the script 'https://code.jquery.com/jquery-3.5.1.slim.min.js' because it violates the following Content Security Policy directive: "script-src 'self'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

Это моя политика CSP, которую я пытался заставить работать, и теперь сомневаюсь, что она будет работать.

          "content_security_policy": {
    "script-src": "'self' 'unsafe-eval' https://unpkg.com https://code.jquery.com https://stackpath.bootstrapcdn.com https://cdn.jsdelivr.net/ https://cdn.datatables.net https://cdnjs.cloudflare.com https://cdn.rawgit.com; object-src 'self'"
},

На этом есть действительно хороший поток переполнения стека , но он предназначен для manifest v2.

Спасибо

1 ответ

I was able to get this working and now the extension doesn't require any external source once it's built. It took a while and there were no answers here so I'm posting my solution here.

I created this shell script to download the external packages to a folder called third party.

parts of package.json

        scripts {
        "build_myapp": "npm install && npm run build_prod",

        "build_prod": "./getexternalscripts.sh & npm run build_myapp",

        "tar2zip": "tarball=$(npm list --depth 0 | sed 's/@/-/g; s/ .*/.tgz/g; 1q;'); tar -tf $tarball | sed 's/^package\\///' | zip -@r package; rm $tarball",

        "package": "npm run build_prod && npm pack && npm run tar2zip && mv package.zip myapp-$npm_package_version.zip"
 
    }

getexternalscripts.sh

      #!/bin/bash
wget -N https://code.jquery.com/jquery-3.5.1.slim.min.js -P ./thirdparty/
wget -N https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js  -P ./thirdparty/
wget -N https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js -P ./thirdparty/
wget -N https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js -P ./thirdparty/

When referencing these in my html files it looks like this

      <head>
    <script src="/thirdparty/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"></script>
    <script src="/thirdparty/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"></script>
    <script src="/thirdparty/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"></script>
    <script src="/thirdparty/axios.min.js"></script>
</head>