2011-01-19 6 views
5

Hice una muy simple chrome extension que permite a los usuarios resaltar un número DOI, haga clic derecho y elija "Resolver DOI", y los envía a la página web asociada. En este momento, esto se hace en background.html con:¿Cómo puedo restringir que los menús contextuales aparezcan solo para cierto texto seleccionado en una extensión de Chrome?

chrome.contextMenus.create({ 
"title" : "Resolve DOI", 
"type" : "normal", 
"contexts" : ["selection"], 
"onclick" : getClickHandler() 
}); 

me gustaría restringir la opción del menú contextual que aparecerá solamente si el texto se destacan comienza con "10" ¿Alguna sugerencia sobre cómo hacer esto? ¿Debo esperar a que el módulo Menús contextuales se vuelva más avanzado?

Respuesta

9

Debería controlar la creación del menú de contenido a partir de un script de contenido. La creación/eliminación dinámica del menú debe ejecutarse bastante rápido y el retraso será imperceptible para un usuario.

  • Agregue el detector de eventos mousedown en un script de contenido y compruebe si la selección satisface su patrón.
  • Según si la selección coincide con el patrón, envíe una solicitud a una página de fondo para pedirle que cree o elimine el menú.

algo por el estilo (no probado):

content_script.js:

document.addEventListener("mousedown", function(event){ 
    var selection = window.getSelection().toString(); 
    if(selection.match(/^10\./)) { 
     chrome.extension.sendRequest({cmd: "create_menu"}); 
    } else { 
     chrome.extension.sendRequest({cmd: "delete_menu"}); 
    } 
}, true); 

background.html:

chrome.extension.onRequest.addListener(function(request) { 
    if(request.cmd == "create_menu") { 
     chrome.contextMenus.removeAll(function() { 
      chrome.contextMenus.create({ 
       "title" : "Resolve DOI", 
       "type" : "normal", 
       "contexts" : ["selection"], 
       "onclick" : getClickHandler() 
      }); 
     }); 
    } else if(request.cmd == "delete_menu") { 
     chrome.contextMenus.removeAll(); 
    } 
}); 
+0

Terrific. Probado y trabajando sin necesidad de modificaciones. Muchas gracias. Esto también me da una introducción a los oyentes para que pueda hacer que mi página de opciones aplique cambios inmediatamente. – MDMower

+0

Parece haber algunos problemas con las páginas https. El content_script.js no se está filtrando correctamente. Como ejemplo: Esta página y la página de mi extensión (https://chrome.google.com/webstore/detail/goanbaknlbojfglcepjnankoobfakbpg) están abiertas. Selecciono texto que contiene "10" en esta página y se crea el menú. Paso a la otra pestaña y selecciono cualquier texto, y el menú todavía existe. Vuelvo a esta página, selecciono cualquier que no sea "10". texto, y el menú desaparece. Volviendo a la pestaña https, independientemente de si realizo una selección válida, el menú no aparecerá. – MDMower

+0

@mdmower Los scripts de contenido están deshabilitados en las páginas de la tienda web por razones de seguridad (lo mismo ocurre con el sitio de la antigua galería de extensiones) – serg

Cuestiones relacionadas