¿Cómo tener un script de fondo y algo similar a una ventana emergente predeterminada?

Por lo tanto, entiendo que no puede tener secuencias de comandos de fondo y una ventana emergente predeterminada juntas. Si esto es así, ¿cómo puedo tener algo similar a una ventana emergente predeterminada (donde hay un simple HTML que aparece al hacer clic en el icono de la extensión) y hacer que el script de fondo modifique el contenido de esa ventana emergente?

Aquí está el manifiesto.

"browser_action": { "default_title": "Mark this position!", "default_icon": "icon.png" }, "background": { "scripts": ["background.js"], "persistent": false }, "content_scripts": [ { "matches": [ "http://*/*", "https://*/*" ], "js": ["content.js"] } ], 

Absolutamente puede tener tanto una ventana emergente (es decir, un conjunto default_popup ventanas emergentes) como una página de fondo. La página de fondo tendrá su propio ciclo de vida (con "persistent": false es una página de Evento ) y la ventana emergente existirá mientras esté abierta.

Supongo que su confusión se debe al hecho de que no puede tener una ventana emergente y un oyente chrome.browserAction.onClicked al mismo tiempo.

Esto es cierto, pero hay otras formas de indicar a su página de fondo que se ha abierto la ventana emergente.

Puede enviar un mensaje a la página de fondo desde la ventana emergente:

 // popup.js, should be included in the popup chrome.runtime.sendMessage({popupOpen: true}, function(response) { /* process response */ }); // background.js chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) { if(message.popupOpen) { /* do stuff */ sendResponse(response); } }); 

Si coloca el código emergente en el nivel superior, se informará al fondo tan pronto como se abra la ventana emergente.

Si bien puede acceder directamente a la ventana de la ventana emergente desde el fondo (consulte chrome.extension.getViews ), se recomienda que mueva la lógica de la interfaz de usuario a la ventana emergente y se comunique con el fondo usando Mensajería como anteriormente y chrome.storage compartido.