Je cherchais à accomplir la même chose que le message original, et était capable de le faire fonctionner en utilisant un message qui passe. Peu importe si c'est une mauvaise pratique ou non, j'ai utilisé la propriété contextMenu enabled (true/false) pour laisser mon option de menu contextuel présente, mais grisée.
J'ai créé un menu contextuel. La propriété importante est l'identifiant. Le reste est pour la plupart arbitraire car il sera modifié dynamiquement.
Dans content.js
//This event listener will determine if the context menu should be updated
//based on if the right-button was clicked and if there is a selection or not
document.addEventListener("mousedown", function(event){
if (event.button !== 2) {
return false;
}
var selected = window.getSelection().toString();
if(event.button == 2 && selected != '') {
//get selected text and send request to bkgd page to create menu
chrome.extension.sendMessage({
'message': 'updateContextMenu',
'selection': true});
} else {
chrome.extension.sendMessage({
'message': 'updateContextMenu',
'selection': false});
}
}, true);
En background.js:
//add a message listener that will modify the context menu however you see fit
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.message == 'updateContextMenu') {
if (request.selection) {
chrome.contextMenus.update('contextMenuId',{
'title': 'New Title',
'enabled': true,
"contexts": ["all"],
'onclick': someFunction
});
} else {
chrome.contextMenus.update('contextMenuId',{
'title': 'Select some text first',
'enabled': false,
"contexts": ["all"]
});
}
} else {
sendResponse({});
}
});
//The original context menu. The important property is the id. The rest is mostly
//arbitrary because it will be changed dynamically by the listener above.
chrome.contextMenus.create({
'id': 'contextMenuId',
'enabled': false,
'title': 'Some Title',
"contexts": ["all"]
});
Avoir une personne handicapée "Sélectionner un texte" option est source de confusion. Pourquoi ne pas simplement avoir une option "Afficher" lorsque le texte est sélectionné? – Bojangles
C'était la décision prise par l'équipe de conception. Je suis juste le développeur amateur de l'équipe: P – Jon
Je crois que leur logique est de faire savoir à l'utilisateur qu'il est nécessaire de sélectionner du texte afin d'utiliser notre extension. – Jon