Soy bastante nuevo en el desarrollo de extensiones de Chrome, estoy tratando de hacer un mejor PiP (Picture in Picture) que no tenga la limitación de tamaño máximo de ventana.
Estoy usando esta extensión como referencia, básicamente se comporta de la misma manera que el PiP predeterminado funciona con video.requestPictureInPicture() que es lo que no quiero usar porque la ventana emergente de la extensión tiene un tamaño de ventana limitado.
En cambio, tengo una página index.html con mi extensión que está cargada con window.open en background.js , esta página de índice tendrá un elemento de video al que se pasa HTMLVideoElement.
Intenté usar chrome.runtime.sendMessage para enviar el video a video.js que carga la página index.html, pero esto no parece funcionar con HTMLVideoElement . Leí en otra parte que debería hacer JSON.stringify/JSON.parse para este objeto, pero eso da como resultado undefined.
Relevante manifest.json:
"background": { "service_worker": "background.js" }, "content_scripts": [{ "all_frames": true, "js": [ "content.js" ], "matches": [ "*://*/*" ], "run_at": "document_start" }], "web_accessible_resources": [{ "resources": [ "index.html" ], "matches": [ "*://*/*" ] }], "manifest_version": 3, "permissions": [ "storage", "scripting", "activeTab", "tabs" ],contenido.js:
const videos = new Set(); window.addEventListener('canplay', e => { if(e.target.tagName === 'VIDEO') { videos.add(e.target); chrome.runtime.sendMessage({ method: 'VIDEO_PLAYING' }); } }, true);fondo.js:
await chrome.scripting.executeScript({ ... var win = window.open(chrome.runtime.getURL('index.html'), 'PiP'); win.focus(); chrome.runtime.sendMessage({ method: 'VIDEO', data: JSON.stringify(video) });video.js: - este es el js que se acaba de incluir en index.html
const onMessage = (request, sender) => { if(request.method === 'VIDEO') { var data = JSON.parse(request.data); console.log(video.src); //undefined } }; chrome.runtime.onMessage.addListener(onMessage);Tal vez mi método para hacer esto sea completamente incorrecto. ¿Hay otras formas en que pueda pasar tales objetos a index.html de esta manera?