2014-11-24 35 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操作(寫入磁盤)所致。

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