0
我正在使用活动页面!并需要使用子菜单(深层树)创建上下文菜单。
它的深度取决于用户数据。并且创建该上下文菜单可能非常频繁,因为它取决于用户的操作。我可以用一些逻辑来降低这些更新的频率,但仍然可以在会话期间发生几次。
问题是,创建这些菜单会冻结Chrome的秒数或两个。
由于我使用活动页面,因此我必须使用chrome.contextMenus.onClicked.addListener
。之前,当我使用onClick处理程序时,我没有遇到冻结(相同数量的数据)。
现在我必须在我的主要上下文项目(任何其他方法?)的回调中创建子菜单创建。chrome.contextMenus.create冻结了铬
我这是怎么做的:
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');
});
});
}
,这是我的点击handeler
chrome.contextMenus.onClicked.addListener(function(info, tab) {
if (info.menuItemId.indexOf("id_pattern_of_my_submenu_items") > -1) {
//do some stuff with it
}
});
有没有更好的办法,使无严寒铬这项工作? 我的数据数组包含大约700个节点,最大深度为3 lvl。