[英]How to get a reference for TITLE, in chrome.contextMenus.create onClick function?
[英]chrome.contextMenus.create freezes chrome
我正在使用活动页面! 并且需要使用子菜单(深树)创建上下文菜单。
它的深度取决于用户数据。 而且,该上下文菜单的创建可能非常频繁,因为它取决于用户的操作。 我可以通过一些逻辑降低这些更新的频率,但是在会话期间可能会发生两次。
问题在于这些菜单的创建会冻结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
}
});
有没有更好的方法可以在不冻结铬的情况下完成这项工作? 我的数据数组包含大约700个节点,最大深度为3 lvl。
我在https://crbug.com/486505上打开了一个错误报告。 此问题是由以下事实引起的:在您添加,修改或删除事件页面中的上下文菜单项时,事件页面执行相对昂贵的I / O操作(写入磁盘)。
当前,唯一的解决方法是使用背景页面而不是事件页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.