繁体   English   中英

chrome.contextMenus.create冻结chrome

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM