javascript - pagina - menu contextual windows 7
¿Agregar elementos del menú contextual en un script de fondo no persistente? (2)
Agradeciendo lo que escribió Marco Bonelli:
Si desea utilizar una página de evento o una página de fondo no persistente , como lo llama, debe registrar un menú contextual a través de contextMenus.create
en el controlador de runtime.onInstalled
de runtime.onInstalled
, ya que estos registros de menú contextual "persisten" de todos modos.
Sin embargo, tiene que agregar la función oyente para el evento contextMenus.onClicked
cada vez que la página del evento se vuelve a cargar, ya que el registro de su deseo de escuchar en ese evento persiste, mientras que la devolución de llamada del manejador no lo hace.
Entonces, para hacerlo bien, registre su contexto-menú-a-ser desde runtime.onInstalled
, pero establezca la devolución de llamada del controlador de eventos usando contextMenus.onClicked.addListener
desde el nivel superior u otro código, que se garantiza que se ejecutará cada vez que el cargas de página de evento . [ 1 ]
Estoy agregando un elemento del menú contextual de un script de fondo no persistente usando:
chrome.contextMenus.create({
title: ''Get Code'',
id: ''myUniqueIdForThisExtension123'',
contexts: [''all''],
onclick: onClickHandler
});
function onClickHandler() {}
La documentación simplemente dice:
La identificación única para asignar a este artículo. Obligatorio para las páginas del evento. No puede ser lo mismo que otra ID para esta extensión.
Así que agregué una identificación única, pero todavía no puedo hacer que funcione. Nada nuevo insertado en el menú contextual.
Usted dice que tiene una página de fondo no persistente, por lo que debe tener un archivo manifest.json
que se vea así:
{
"manifest_version": 2,
"name": "My extension",
"description": "My description",
"version": "1",
"permissions": ["contextMenus"],
"background": {
"persistent": false,
"scripts": [
"/background.js"
]
}
}
Ahora, dado que tienes una página de fondo no persistente, tienes que usar los oyentes adecuados para "activarla" cuando necesites usar el menú contextual.
Citando de la documentación oficial :
Mejores prácticas al usar páginas de eventos:
[...]
- Si está utilizando la API de menús contextuales, pase un parámetro de id. De cadena a
contextMenus.create
y use la devolución de llamadacontextMenus.onClicked
lugar de un parámetroonclick
paracontextMenus.create
.
Entonces, simplemente, su error es usar el parámetro onclick
lugar del método contextMenus.onClicked.addListener()
en su background.js
.
Solución
Ya dije que deberías usar el evento onClicked
, pero me gustaría agregar eso, refiriéndome a la respuesta de xa :
Debe registrar un menú contextual a través de
contextMenus.create
en el controlador deruntime.onInstalled
deruntime.onInstalled
, ya que estos registros de menú contextual persisten de todos modos.
Tan simple, dado que, una vez creado, los menús contextuales persisten en su extensión, lo mejor es definirlos solo una vez: cuando su extensión está instalada (o actualizada), y agregue el oyente cada vez que se cargue la página de fondo.
chrome.runtime.onInstalled.addListener(function() {
chrome.contextMenus.create({
title: ''My menu'',
id: ''menu1'', // you''ll use this in the handler function to identify this context menu item
contexts: [''all''],
});
});
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId === "menu1") { // here''s where you''ll need the ID
// do something
}
});
Eso es lo que necesita para crear un menú contextual en una página de evento, como se muestra en la página de documentación de la API chrome.contextMenus
.