Traté de usar el modelo local de tensorflow en mi extensión de Chrome. En contentScript :
import * as tf from '@tensorflow/tfjs'; const MODEL_URL = './model/model.json'; const model = tf.load_model(MODEL_URL); model.run("text"); Mi manifest.json :
"content_security_policy": { "extension_pages": "script-src 'self' http://localhost; object-src 'self';" }, "background": { "service_worker": "background.js" }, "action": { "default_title": "My extension", "default_popup": "popup.html" }, "permissions": [ "tabs", "history", "background", "webNavigation", "activeTab", "storage" ], "content_scripts": [ { "matches": [ "<all_urls>" ], "run_at": "document_start", "js": [ "contentScript.js" ] } ] Pero recibí el error 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'".
Mi package.json :
{ "name": "my-extension", "version": "0.1.0", "description": "My Chrome Extension", "private": true, "scripts": { "watch": "webpack --mode=development --watch --config config/webpack.config.js", "build": "webpack --mode=production --config config/webpack.config.js" }, "devDependencies": { "copy-webpack-plugin": "^6.4.1", "css-loader": "^4.3.0", "file-loader": "^6.2.0", "mini-css-extract-plugin": "^0.10.1", "size-plugin": "^2.0.2", "webpack": "^4.46.0", "webpack-cli": "^3.3.12", "webpack-merge": "^5.8.0" }, "dependencies": { "@tensorflow/tfjs": "^3.16.0", "@tensorflow/tfjs-node": "^3.16.0" } }¿Cuál debería ser la forma correcta de usar el modelo local?
La versión 3 del manifiesto no permite el uso de 'unsafe-eval' . Debe agrupar el código de la biblioteca en su extensión o usar una API externa a la que llamará su extensión usando algo como el paso de mensajes.
De la descripción general oficial de la versión 3 del manifiesto :
Una mejora de seguridad clave en Manifest V3 es que las extensiones no pueden cargar código remoto como JavaScript o archivos Wasm. Esto nos permite revisar de manera más confiable y eficiente el comportamiento seguro de las extensiones cuando se envían a Chrome Web Store. Específicamente, toda la lógica debe estar incluida en el paquete de la extensión.
En lugar de código remoto, recomendamos el uso de archivos de configuración remota. Consulte la guía de migración para obtener más información sobre cómo trabajar con este cambio.
Aquí está el enlace a la sección de la guía de migración sobre el código alojado de forma remota (PD: no pego todo aquí porque estas guías podrían actualizarse)