una pagina oncontextmenu inspeccionar false elemento deshabilitar derecho contextual como clic bloquear javascript google-chrome google-chrome-extension

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:

[...]

  1. 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 llamada contextMenus.onClicked lugar de un parámetro onclick para contextMenus.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 de runtime.onInstalled de runtime.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 .