在manifest_version=3的chrome插件中我要实现下面的功能我在background中创建了一个contextMenus 作用域是allselection初始化的时候他是禁用的因为没选中任何文本我希望在右键的时候自动判断是否选中了文本如果选中了文本那么更新该菜单的enabled=trueonShown不行我试了因为根本没有这个事件
在manifest_version=3中,你可以使用contextMenus API来实现这个功能。在background脚本中创建一个contextMenus项,并将其作用域设置为'all'和'selection'。然后,你可以使用webNavigation API中的onCreatedNavigationTarget事件来监听右键菜单打开的事件,然后在回调函数中判断是否选中了文本,并更新菜单的enabled属性。
下面是实现的代码示例:
background.js:
chrome.runtime.onInstalled.addListener(function() {
// 在安装或更新插件时创建contextMenus项
chrome.contextMenus.create({
id: "myContextMenu",
title: "My Context Menu",
contexts: ["all", "selection"],
enabled: false // 初始化禁用
});
});
chrome.webNavigation.onCreatedNavigationTarget.addListener(function(details) {
// 右键菜单打开时的回调函数
// 检查是否选中了文本
chrome.tabs.executeScript(details.tabId, { code: "window.getSelection().toString()" }, function(selection) {
if (selection && selection[0]) {
// 选中了文本,更新菜单的enabled属性为true
chrome.contextMenus.update("myContextMenu", { enabled: true });
} else {
// 没有选中文本,更新菜单的enabled属性为false
chrome.contextMenus.update("myContextMenu", { enabled: false });
}
});
});
这样,当你右键点击页面时,会自动判断是否选中了文本,并根据结果更新菜单的enabled属性。
原文地址: https://www.cveoy.top/t/topic/jbSV 著作权归作者所有。请勿转载和采集!