2011-06-17 6 views
8

Lo que quiero hacer es:menús contextuales de extensión de cromo, ¿cómo mostrar un elemento de menú solo cuando no hay selección?

si el usuario no selecciona nada, la pantalla del menú A;

si el usuario selecciona algo, elemento de menú de visualización B.

Hasta ahora lo que puedo conseguir es:

si el usuario no selecciona nada, la pantalla del menú A;

si el usuario selecciona algo, mostrar ambos A y B.

Quiero saber:

cómo hacer punto A a desaparecer cuando hay selección?

¡Muchas gracias!

A continuación es mi código:

var all = chrome.contextMenus.create 
({ 
    "title": "A", 
    "contexts":["page"], 
    "onclick": doA 
}); 

var selection = chrome.contextMenus.create 
({ 
    "title": "B", 
    "contexts":["selection"], 
    "onclick": doB 
}); 

Respuesta

7

Usted tendría que inyectar un script contenido de cada página que comprobar en mousedown evento (antes de que aparezca el menú) o no hay una selección en el página, y luego enviaría un comando a una página de fondo para crear elementos de menú de acuerdo.

content_script.js:

document.addEventListener("mousedown", function(event){ 
    //right click 
    if(event.button == 2) { 
     if(window.getSelection().toString()) { 
      chrome.extension.sendRequest({cmd: "createSelectionMenu"}); 
     } else { 
      chrome.extension.sendRequest({cmd: "createRegularMenu"}); 
     } 
    } 
}, true); 

background.html

chrome.extension.onRequest.addListener(function(request) { 
    if(request.cmd == "createSelectionMenu") { 
     chrome.contextMenus.removeAll(function() { 
      chrome.contextMenus.create({ 
       "title": "B", 
       "contexts":["selection"], 
       "onclick": doB 
      }); 
     }); 
    } else if(request.cmd == "createRegularMenu") { 
     chrome.contextMenus.removeAll(function() { 
      chrome.contextMenus.create({ 
       "title": "A", 
       "contexts":["page"], 
       "onclick": doA 
      }); 
     }); 
    } 
}); 
+0

buen truco amigo –

+0

Gracias. Probé tu código y no apareció ningún menú contextual. Luego volví a cambiar a mi código original, y milagrosamente funcionó como yo quería. No entiendo por qué. Lo probaré en otra computadora. Muchas gracias. – Betty

0

Tal vez esto fue un error o la funcionalidad era diferente cuando la OP originalmente hizo la pregunta (jun 17 de , 2011); pero hoy, el código OP funciona exactamente como se esperaba simplemente usando los parámetros contexts en sus llamadas chrome.contextMenus.create(), exactamente como lo tiene escrito.

Cuestiones relacionadas