Javascript chrome.contextMenus.create冻结chrome
我正在使用事件页面!!并且需要创建带有子菜单(深树)的上下文菜单。Javascript chrome.contextMenus.create冻结chrome,javascript,google-chrome,contextmenu,Javascript,Google Chrome,Contextmenu,我正在使用事件页面!!并且需要创建带有子菜单(深树)的上下文菜单。 其深度取决于用户数据。上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以用一些逻辑来降低这些更新的频率,但在会话过程中可能会发生几次。 问题是这些菜单的创建会使Chrome冻结一两秒。 因为我使用的是事件页面,所以必须使用chrome.contextMenus.onClicked.addListener。以前,当我使用onClick处理程序时,我没有经历过冻结(相同数量的数据)。 现在我必须把创建子菜单放在我的主上下文
其深度取决于用户数据。上下文菜单的创建可能非常频繁,因为它取决于用户的操作。我可以用一些逻辑来降低这些更新的频率,但在会话过程中可能会发生几次。
问题是这些菜单的创建会使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');
});
});
}
有没有更好的方法使这项工作不冻结铬?
我的数据数组包含大约700个节点,最大深度为3层。我在上打开了一个错误报告。问题的原因是,在事件页面中添加、修改或删除上下文菜单项时,事件页面执行相对昂贵的I/O操作(写入磁盘) 目前,唯一的解决办法是使用背景页面而不是事件页面
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId.indexOf("id_pattern_of_my_submenu_items") > -1) {
//do some stuff with it
}
});