在扩展中使用 chromecontextMenuscreate有一个菜单 的作用域是selection但是我想让他在没有选中文本的情况下显示出来是禁用的状态 能实现吗
在扩展中使用 chrome.contextMenus.create 创建菜单时,无法直接设置菜单在没有选中文本时显示为禁用状态。但你可以通过监听页面的 mouseup 事件来实现类似的效果。
首先,在扩展的 background.js 中创建一个变量来保存菜单的 ID:
var menuId;
然后,在 chrome.contextMenus.create 中创建菜单,并将菜单的 ID 保存到上面创建的变量中:
menuId = chrome.contextMenus.create({
title: "菜单标题",
contexts: ["selection"],
onclick: myFunction
});
接下来,在 background.js 中监听页面的 mouseup 事件:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.executeScript(tabId, { code: 'document.addEventListener("mouseup", function() { chrome.runtime.sendMessage({ selection: window.getSelection().toString() }); });' });
});
最后,在 background.js 中添加消息监听器,根据接收到的消息来更新菜单的禁用状态:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
if (message.selection === "") {
chrome.contextMenus.update(menuId, { enabled: false });
} else {
chrome.contextMenus.update(menuId, { enabled: true });
}
});
这样,在没有选中文本时,菜单将显示为禁用状态。当用户选中文本后,菜单将自动启用。请根据你的需求调整菜单的标题和其他参数。
原文地址: https://www.cveoy.top/t/topic/jbQW 著作权归作者所有。请勿转载和采集!