在扩展中使用 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 });
  }
});

这样,在没有选中文本时,菜单将显示为禁用状态。当用户选中文本后,菜单将自动启用。请根据你的需求调整菜单的标题和其他参数。

在扩展中使用 chromecontextMenuscreate有一个菜单 的作用域是selection但是我想让他在没有选中文本的情况下显示出来是禁用的状态 能实现吗

原文地址: https://www.cveoy.top/t/topic/jbQW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录