2014-11-24 53 views
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。

回答

1

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

目前唯一的解决方法是使用背景页面而不是事件页面。