Javascript Tensorflow в расширении Chrome не работает из-за «unsafe-eval»

Я пытаюсь обновить расширение Chrome до версии Manifest v3. Я использую модель JSTensorflow, и она выдает эту ошибку:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".

Я знаю, что Manifest v3 не допускает «unsafe-eval», так как я могу решить эту проблему?

Мой манифест.json:

{
    "name": "Recipick DEVELOPMENT",
    "description": "Pick the recipe from a website",
    "version": "1.0.0",
    "manifest_version": 3,
    "background": {
        "service_worker": "background.js",
        "type": "module"
    },
    "action": {
        "default_title": "Recipick",
        "default_icon": "/images/icon_1.png"
    },
    "permissions": [
        "activeTab",
        "clipboardWrite",
        "sessions",
        "scripting",
        "storage",
        "tabs"
    ],
    "host_permissions": [ "*://*/*" ],
    "content_security_policy": {
        "extension_pages": "script-src 'self'; object-src 'self'"
    },
    "web_accessible_resources":  [{
        "resources": [ "*.gif" ],
        "matches": [ "*://*/*" ] 
    }]
} 

Спасибо за вашу помощь!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
42
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь мы узнаем, что хром запрещает любой внешний ресурс или любой скрипт, который включает eval() использование чего-то, что называется Content Security Policy.

Я также запускаю проект с той же идеей, что и ваша, и просто столкнулся с той же проблемой. На этой странице также упоминаются некоторые обходные пути:

  1. Использование «библиотеки шаблонов» (библиотека, соответствующая правилам)

  2. Доступ к удаленному контенту (отправка запросов на внешний сервер, который выполняет там обработку)

Насколько я знаю, не существует tensorflow.js, который соответствует требованиям, поэтому № 2 может быть единственным ответом здесь.

Ответ принят как подходящий

Я только что узнал, как это сделать.

Вы можете использовать «unsafe-eval» и другие действия, которые не разрешены, если вы используете их в среде «песочницы». Как сказано в https://developer.chrome.com/docs/extensions/mv3/manifest/песочница/ :

A sandboxed page will not have access to extension APIs, or direct access to non-sandboxed pages (it may communicate with them via postMessage()).

A sandboxed page is not subject to the Content Security Policy (CSP) used by the rest of the extension (it has its own separate CSP value). This means that, for example, it can use inline script and eval.

Я создал HTML-страницу с именем sandbox.html и вставил ее на страницу, которую я хотел обработать как iframe, со встроенными в нее сценариями. Затем данные для обработки принимаются и возвращаются в Content Scripts через window.postMessage().

Вот пример такой реализации: https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/apps/samples/песочница.

Эта страница также может быть полезна: https://developer.chrome.com/docs/extensions/mv3/sandboxingEval/

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