Ejemplo: Insertador de imágenes mediante script de contenido
En este ejemplo se usa código JavaScript para insertar la stars.jpeg
imagen en la parte superior de la página web actual, dentro del <body>
elemento . El elemento emergente de la extensión contiene un título y un botón HTML con la etiqueta Insertar imagen. Al hacer clic en el botón Insertar imagen , el código JavaScript de la extensión envía un mensaje desde el elemento emergente del icono de extensión e inserta dinámicamente JavaScript que se ejecuta en la pestaña del explorador.
En este ejemplo se muestran las siguientes características de extensión:
- Inserción de bibliotecas de JavaScript en una extensión.
- Exposición de recursos de extensión a pestañas del explorador.
- Incluir páginas web de contenido en pestañas de explorador existentes.
- Hacer que las páginas web de contenido escuchen los mensajes de los elementos emergentes y respondan.
Vista previa del ejemplo
Para instalar el ejemplo de extensión, use la pestaña Administrar extensiones del explorador, haga clic en el botón Extensiones () para mostrar la lista de extensiones instaladas y, a continuación, haga clic en esta extensión de ejemplo:
La extensión muestra una página web HTML pequeña en un elemento emergente, que contiene un título, un botón Insertar imagen e instrucciones:
Al hacer clic en el botón Insertar imagen , el código JavaScript se stars.jpeg
inserta temporalmente en la parte superior de la página web actual e inserta el contenido de la página web en debajo de la imagen. El contenido insertado establece el elemento image para mostrar la imagen stars.jpeg
estática en la parte superior de la página web actual:
Al hacer clic en la imagen, javaScript insertado quita la imagen del árbol DOM y de la página web.
Obtenga, instale y ejecute el ejemplo como se indica a continuación.
Clonación del repositorio de MicrosoftEdge-Extensions
Puede usar varias herramientas para clonar un repositorio de GitHub. Puede descargar un directorio seleccionado o clonar todo el repositorio.
Clone el repositorio MicrosoftEdge-Extensions en la unidad local y, a continuación, cambie a una rama de trabajo, como se indica a continuación.
En un símbolo del sistema, escriba
git
para comprobar si git está instalado.Si aún no ha terminado, descargue git e instálelo.
Si aún no ha terminado, inicie un símbolo del sistema en el que esté instalado Git.
Cambie al directorio en el que desea clonar el repositorio MicrosoftEdge-Extensions . Por ejemplo:
cd C:/Users/localAccount/GitHub/
En Microsoft Edge, vaya al repositorio MicrosoftEdge-Extensions .
Haga clic en la flecha abajo del lado derecho del botón verde Código y, a continuación, en la sección Clonar mediante la dirección URL web , haga clic en el botón Copiar dirección URL al Portapapeles junto a
https://github.com/microsoft/MicrosoftEdge-Extensions.git
.En la ventana del símbolo del sistema, escriba el comando:
git clone https://github.com/microsoft/MicrosoftEdge-Extensions.git
El
/MicrosoftEdge-Extensions/
directorio se agrega dentro del directorio especificado.
Crear una rama de trabajo y cambiar a ella
Compruebe la lista de directorios:
ls
Se
/MicrosoftEdge-Extensions/
muestra el directorio.Cambie al nuevo directorio:
cd MicrosoftEdge-Extensions
Cree una rama de trabajo:
git branch test
Cambie a la rama de trabajo:
git switch test
Devuelve:
Switched to branch 'test'
Ahora puede modificar el código de la rama de trabajo sin modificar el código que se encuentra en la rama "principal" del repositorio. Más adelante es posible que quiera volver a la rama "principal" o crear una rama diferente basada en la rama "principal".
Instalar el ejemplo localmente
En lugar de instalar el ejemplo desde la Tienda, instalará el ejemplo localmente, para que pueda modificarlo y probar rápidamente los cambios. A veces, la instalación local se denomina instalación local de una extensión.
En Microsoft Edge, haga clic en el botón Extensiones (
), junto a la barra Dirección, si se muestra este icono. O bien, seleccione Configuración y mucho más (
>
Extensiones. Se abre el elemento emergente Extensiones :
Haga clic en Administrar extensiones. La página Administración de extensiones se abre en una nueva pestaña:
Active el botón de alternancia Modo de desarrollador .
Al instalar la extensión de ejemplo por primera vez, haga clic en el botón Cargar desempaquetado (
"). Se abre el cuadro de diálogo Seleccionar el directorio de extensión .
Seleccione el directorio que contiene los archivos de origen de la extensión, como
manifest.json
.Ruta de acceso de ejemplo:
C:\Users\localAccount\GitHub\MicrosoftEdge-Extensions\Extension-samples\picture-inserter-content-script
Haga clic en el botón Seleccionar carpeta .
Se cierra el cuadro de diálogo Seleccionar el directorio de extensión .
La extensión se instala en el explorador, de forma similar a una extensión instalada desde el almacén:
Ejecutar el ejemplo
Vaya a una página web, como la aplicación TODO, en una nueva ventana o pestaña. La pestaña no debe estar vacía y no debe ser la página Administrar extensiones, ya que este ejemplo inserta contenido en la página web actual.
Actualice la página web. Esto a veces es necesario después de volver a cargar una extensión.
En Microsoft Edge, a la derecha de la barra de direcciones, si se muestra este icono, haga clic en el botón Extensiones (
). O bien, seleccione Configuración y mucho más (
>Extensiones.
Se abre el elemento emergente Extensiones :
Haga clic en el icono o el nombre de la extensión (insertador de imágenes mediante el script de contenido).
Se abre la extensión y el icono de la extensión se agrega junto a la barra de direcciones y el icono Extensiones (
Se abre un elemento emergente que contiene una página web HTML pequeña con un título, un botón Insertar imagen e instrucciones:
Haga clic en el botón Insertar imagen .
stars.jpeg
se inserta en la parte superior de la página web actual en la pestaña actual, insertando el contenido de la página web debajo de la imagen:Haga clic en la
stars.jpeg
imagen que rellena la parte superior de la página web. Ese elemento de imagen se quita del árbol DOM y la página web, y se restaura la página web actual, desplazando su contenido hacia arriba hasta la parte superior de la pestaña.
La extensión envía un mensaje desde el elemento emergente del icono de extensión e inserta dinámicamente JavaScript que se ejecuta como contenido en la pestaña del explorador. El contenido insertado establece el elemento de imagen que se va a mostrar stars.jpeg
en la parte superior de la página web actual y, a continuación, quita la imagen al hacer clic en la imagen.
Vea también:
Estudio del ejemplo
En las secciones siguientes, estudiará el ejemplo. Después, para desarrollar su propia extensión de Microsoft Edge, puede copiar y modificar el directorio del ejemplo e instalar y probar la extensión resultante.
Archivos y directorios
El ejemplo tiene la siguiente estructura de directorios y archivos.
Ruta de acceso de ejemplo para el ejemplo:
C:\Users\localAccount\GitHub\MicrosoftEdge-Extensions\Extension-samples\picture-inserter-content-script
Directorios y archivos en el /picture-inserter-content-script/
directorio:
/content-scripts/
content.js
/icons/
extension-icon16x16.png
extension-icon32x32.png
extension-icon48x48.png
extension-icon128x128.png
/images/
stars.jpeg
/popup/
popup.html
popup.js
manifest.json
- El
/content-scripts/
directorio contienecontent.js
, que es el script que se inserta en la página web actual. - El
/icons/
directorio contiene versiones de un.png
archivo que se usa para representar la extensión cerca de la barra de direcciones del explorador, en el elemento emergente Extensiones y en la página Administración de extensiones . - El
/images/
directorio contienestars.jpeg
, que se muestra en el elemento emergente de la extensión. - El
/popup/
directorio contiene los archivos:-
popup.html
define el contenido de la página web emergente inicial de la extensión (un título, un botón e instrucciones). -
popup.js
para la página web emergente inicial envía un mensaje al script de contenido (content.js
) que se ejecuta en la página de pestaña, especificando qué archivo de imagen se va a mostrar.
-
-
manifest.json
contiene información básica sobre la extensión.
Estrategia para actualizar la página web para insertar la imagen en la parte superior (stars.jpeg
)
Este ejemplo incluye un script de contenido que se inserta en la página web que se carga en la pestaña del explorador actual.
Al ejecutar el ejemplo de extensión, se muestra la página HTML emergente inicial (
popup.html
), que muestra un título, instrucciones y el botón Insertar imagen .Al hacer clic en el botón Insertar imagen , JavaScript (
popup.js
) de la página emergente inicial envía un mensaje al script de contenido (content.js
) que se ejecuta en la página de pestaña. El mensaje especifica qué archivo de imagen se va a mostrar.El script de contenido (
content.js
) que se ejecuta en la página de pestaña recibe el mensaje y muestra el archivo de imagen especificado (stars.jpeg
).
Página web emergente inicial (popup.html
)
/popup/popup.html
se especifica en el archivo de manifiesto como la página web que se va a mostrar en el elemento emergente inicial de la extensión. El archivo de manifiesto contiene el campo "default_popup": "popup/popup.html"
clave . El archivo de popup.html
este ejemplo es una página web pequeña que contiene un título, un botón Insertar imagen e instrucciones.
popup.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<style>
body {
width: 500px;
}
button {
background-color: #336dab;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
font-size: 16px;
}
</style>
</head>
<body>
<h1>Picture inserter using a content script</h1>
<button id="sendmessageid">Insert picture</button>
<script src="popup.js"></script>
<p>Click the displayed image to remove it from the webpage.</p>
</body>
</html>
JavaScript (popup.js
) para la página emergente inicial, para enviar un mensaje al Código JavaScript insertado
/popup/popup.js
envía un mensaje al script de contenido (content.js
) que se inserta temporalmente en la pestaña del explorador. Para ello, popup.js
agrega un onclick
evento al botón Insertar imagen de la página web emergente, que tiene el identificador sendmessageid
:
popup.js
(parte):
const sendMessageId = document.getElementById("sendmessageid");
if (sendMessageId) {
sendMessageId.onclick = function() {
...
};
}
En popup.js
, chrome.tabs.query
busca la pestaña del explorador actual y, a continuación, chrome.tabs.sendMessage
envía un mensaje a esa pestaña. El ejemplo pasa el identificador de la pestaña actual. El mensaje debe incluir la dirección URL de la imagen que se mostrará.
Debe enviar un identificador único para asignarlo a la imagen insertada, con el fin de volver a encontrar el elemento image más adelante y eliminarlo. Para enviar un identificador único para asignarlo a la imagen insertada, el identificador único se genera en popup.js
y se pasa al script de contenido.
popup.js
(completado):
const sendMessageId = document.getElementById("sendmessageid");
if (sendMessageId) {
sendMessageId.onclick = function() {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
chrome.tabs.sendMessage(
tabs[0].id,
{
url: chrome.runtime.getURL("images/stars.jpeg"),
imageDivId: crypto.randomUUID(),
tabId: tabs[0].id
},
function(response) {
window.close();
}
);
});
};
}
Agente de escucha de mensajes de script de contenido (content.js
)
Este es el content-scripts\content.js
archivo que se inserta en cada página de pestaña del explorador. Este archivo aparece en la content-scripts
sección de manifest.json
.
content.js
(completado):
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
const img = document.createElement("img");
img.id = request.imageDivId;
img.src = request.url;
img.style = "height: auto; width: 90vw;";
document.body.prepend(img);
img.addEventListener("click", () => {
img.remove();
}, { once: true });
sendResponse({ fromcontent: "This message is from content.js" });
});
content.js
registra un agente de escucha mediante el método de la chrome.runtime.onMessage.addListener
API de extensión. Este agente de escucha espera el mensaje que se envía cuando popup.js
llama a chrome.tabs.sendMessage
.
En content.js
, el addListener
método toma un único parámetro que es una función. El primer parámetro de esa función, request
, contiene los detalles del mensaje que se pasa.
En content.js
, cuando el agente de escucha procesa un evento, se ejecuta la función de agente de escucha a addListener
la que se pasa. El primer parámetro de la función de escucha pasada es un request
objeto que tiene atributos asignados por sendMessage
.
En popup.js
, para la chrome.tabs.sendMessage
llamada al método, los atributos del segundo parámetro para sendMessage
son url
, imageDivId
y tabId
.
Esta es la función de agente de escucha aislada que se pasa a addListener
:
content.js
(parte)
function(request, sender, sendResponse) {
const img = document.createElement("img");
img.id = request.imageDivId;
img.src = request.url;
img.style = "height: auto; width: 90vw;";
document.body.prepend(img);
img.addEventListener("click", () => {
img.remove();
}, { once: true });
sendResponse({ fromcontent: "This message is from content.js" });
}
Las cinco primeras líneas de la función de agente de escucha anexan un img
elemento inmediatamente debajo del body
elemento de la pestaña del explorador.
La segunda línea de la función de agente de escucha, img.id = request.imageDivId;
, establece el identificador del img
elemento en el imageDivId
de la solicitud pasada.
En la función de agente de escucha, la addEventListener
llamada agrega una click
función de agente de escucha de eventos que cubre toda la imagen, lo que permite al usuario hacer clic en cualquier lugar de la imagen. Al hacer clic en la imagen insertada, la línea img.remove();
quita la imagen de la página web actual y también se quita el agente de escucha de eventos, especificando { once: true }
.
Cómo stars.jpeg
está disponible desde cualquier pestaña del explorador
Para que esté images/stars.jpeg
disponible desde cualquier pestaña del explorador:
-
popup.js
(anterior) usa lachrome.runtime.getURL
API. - El manifiesto (a continuación) especifica que
web_accessible_resources
el tipo.jpeg
coincide con todas las direcciones URL.
El ejemplo inserta la imagen mediante el src
atributo del img
elemento en la página de contenido. La página de contenido se ejecuta en un subproceso único que no es el mismo que el subproceso que ejecuta la extensión. El archivo de imagen estática debe exponerse como un recurso web para que funcione correctamente.
Se agrega otra entrada en el manifest.json
archivo para declarar que la imagen está disponible para todas las pestañas del explorador:
/manifest.json
(parte):
"web_accessible_resources": [
{
"resources": ["images/*.jpeg"],
"matches": ["<all_urls>"]
}
]
El código del popup.js
archivo envía un mensaje a la página de contenido incrustada en la página de pestaña activa actual.
Cómo se enumeran los recursos en el manifiesto (manifest.json
)
El ejemplo crea e inserta la página de contenido incrustada en la página de pestaña activa actual.
manifest.json
incluye y content-scripts
web_accessible_resources
, como se indica a continuación:
/manifest.json
(completado):
{
"name": "Picture inserter using content script",
"version": "0.0.0.1",
"manifest_version": 3,
"description": "A browser extension that uses JavaScript to insert an image at the top of the current webpage.",
"icons": {
"16": "icons/extension-icon16x16.png",
"32": "icons/extension-icon32x32.png",
"48": "icons/extension-icon48x48.png",
"128": "icons/extension-icon128x128.png"
},
"action": {
"default_popup": "popup/popup.html"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": ["content-scripts/content.js"]
}
],
"web_accessible_resources": [
{
"resources": ["images/*.jpeg"],
"matches": ["<all_urls>"]
}
]
}
La sección del content_scripts
manifiesto inserta JavaScript en todas las pestañas del explorador.
En la content_scripts
sección clave del archivo de manifiesto, el matches
atributo se establece <all_urls>
en , lo que significa que .js
los archivos (o .css
) especificados en la content_scripts
sección clave se insertan en todas las páginas de pestañas del explorador cuando se carga cada pestaña. Los tipos de archivos permitidos que se pueden insertar son JavaScript (.js
) y CSS (.css
).
El manifiesto de este ejemplo especifica un único script de contenido, content-scripts/content.js
.
Cada script de contenido se ejecuta en su propio subproceso, espacio aislado
Cada página de tabulación (y extensión) se ejecuta en su propio subproceso. Incluso si la pestaña del explorador contiene una página web que ejecuta código JavaScript, el content.js
script insertado en esa pestaña del explorador por la extensión no tiene acceso a ese código JavaScript. El script de contenido insertado solo tiene acceso al DOM de la página web.
Pasos siguientes
Para desarrollar su propia extensión de Microsoft Edge, puede copiar y modificar el directorio del ejemplo e instalar y probar la extensión resultante.
Recursos adicionales
- Ejemplo: Página web emergente del visor de imágenes
- Transferir localmente una extensión para instalarla y probarla localmente
GitHub:
-
Repositorio MicrosoftEdge-Extensions .
- /picture-inserter-content-script/ - código fuente de este ejemplo.