gpt4 book ai didi

javascript - chrome.contextMenus.create 卡住 chrome

转载 作者:行者123 更新时间:2023-12-03 11:21:14 24 4
gpt4 key购买 nike

我正在使用事件页面!并且需要创建带有子菜单的上下文菜单(深树)。
它有多深取决于用户数据。并且该上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以通过一些逻辑来降低这些更新的频率,但它仍然可能在 session 期间发生几次。
问题是创建这些菜单会使 Chrome 卡住一两秒。
由于我使用的是事件页面,因此必须使用 chrome.contextMenus.onClicked.addListener。之前,当我使用 onClick 处理程序时,我没有遇到卡住(相同数量的数据)。
现在我必须将子菜单创建放在主上下文项的回调中(还有其他方法吗?)。

我就是这样做的:

function createMenu(data) {
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create({
id: "v7",
title : "some title",
type : "normal",
contexts : ["editable"],
}, function() {
function buildTree(NTF, parID) {
for (var i=0, l=NTF.length; i<l; i++) {
var menuId = NTF[i].id;
var menuText = NTF[i].text;
chrome.contextMenus.create({
id: menuId,
parentId: parID,
title: menuText,
type: "normal",
contexts: ["editable"],

});
if (NTF[i].children) buildTree(NTF[i].children, menuId);
}
}
buildTree(data, 'v7');
});
});
}

这是我的点击处理程序

chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId.indexOf("id_pattern_of_my_submenu_items") > -1) {
//do some stuff with it
}
});

有没有更好的方法可以在不卡住 chrome 的情况下完成这项工作?我的数据数组包含大约 700 个节点,最大 3 级深度。

最佳答案

我已在 https://crbug.com/486505 上打开了错误报告。该问题的原因是,当您在事件页面中添加、修改或删除上下文菜单项时,事件页面会执行相对昂贵的 I/O 操作(写入磁盘)。

目前,唯一的解决方法是使用后台页面而不是事件页面。

关于javascript - chrome.contextMenus.create 卡住 chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27103694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com