Estoy tratando de usar navigator.clipboard.readText() en una pestaña abierta por mi Google Chrome Extension. Cuando lo hago, la siguiente alerta de permiso aparece en cada carga de página, aunque ya he otorgado el permiso:
Este es el código correspondiente:
<button onclick="getClipboardContents()">Add</button> <script> async function getClipboardContents() { try { const text = await navigator.clipboard.readText(); console.log('Pasted content: ', text); } catch (err) { console.error('Failed to read clipboard contents: ', err); } } </script>¿Hay alguna manera de evitar que este mensaje aparezca cada vez?
No especificas cómo estás abriendo la página. El cuadro de diálogo de permiso indica que está accediendo a través de una URL file:// . Las pestañas abiertas por una extensión deben tener una URL chrome-extension:// y el cuadro de diálogo de permiso debe mostrar el nombre de su extensión:
Debe agregar el permiso clipboardRead a su manifest.json y abrir la pestaña con chrome.tabs.create() y chrome.runtime.getURL() . Cuando se hace de esta manera, el cuadro de diálogo de permiso solo debe aparecer en la carga de la primera página y no todas las veces.
Aquí hay un ejemplo mínimo reproducible:
{ "manifest_version": 3, "name": "Clipboard Test", "version": "0.1", "permissions": [ "clipboardRead" ], "action": {}, "background": { "service_worker": "background.js" } } chrome.action.onClicked.addListener(currentTab => { chrome.tabs.create({ 'url': chrome.runtime.getURL("test.html") }); }); <!DOCTYPE html> <title> Clipboard Test </title> <button id="test"> TEST </button> <script src="clip.js"></script> const button = document.querySelector('button#test'); async function paste() { let text = await navigator.clipboard.readText(); alert(text); } button.addEventListener('click', paste);Esto es simplemente imposible. Google Chrome muestra una alerta de este tipo para que el usuario pueda otorgar privilegios de portapapeles o negar los privilegios.