2013-03-09 223 views
2

Chrome擴展上下文菜單我在丁目擴展爲複選框創建一個快捷菜單,我全成創建將只爲可編輯的字段是可見的菜單。自定義背景

問題是我需要作爲託運顯示菜單,根據在文本字段(聚焦元件)中的數據屬性。使用下面的代碼,它顯示在全局級別檢查(意思是如果我檢查菜單在一個頁面/ elemebt是否仍然檢查其他頁面/元素以及。)

我怎樣才能使它檢查/ unchecked根據元素的數據屬性?

var addinMenu = chrome.contextMenus.create({ 
    "title": "My Addin Menu", 
    "contexts": ["editable"] 
}); 
var disableOrEnable = chrome.contextMenus.create({ 
    "type": "checkbox", 
    "title": "Disable", 
    "parentId": addinMenu, 
    "id": "myaddin_disable", 
    "checked": true, 
    "contexts": ["editable"], 
    "onclick": disableOrEnableMyAddin 
}); 
+1

相關:顯示在班只有當右鍵單擊快捷菜單按鈕,以「故事」開始(http://stackoverflow.com/questions/14829677/showing-context-menu-buttons-only-when-right -clicked上類 - 即 - 開始 - 與)(例子中可與類名,但調整的代碼使用數據屬性應該不會太困難) – 2013-03-09 16:49:40

+0

謝謝,我會盡量調整這一個,讓你懂。 – jijesh 2013-03-10 04:37:58

回答

1

呼叫chrome.contextMenus.update()當菜單屬性應該改變,如:

chrome.contextMenus.update(
    disableOrEnable, 
    { type: 'checkbox', checked: false }); 

看起來你可以趕上oncontextmenu事件並作出立即反映在公佈菜單的變化(但我從看Rob W的評論可能有race condition)。這個工作對我來說:

var contextMenu = chrome.contextMenus.create(
    { 
    type: 'checkbox', 
    title: 'how now brown cow', 
    checked: false, 
    contexts: ['all'] 
    }); 

var element = document.getElementById('hello'); 
element.addEventListener(
    'mouseover', 
    function(e) { 
    element.setAttribute('underMouse', 'true'); 
    }); 
element.addEventListener(
    'mouseout', 
    function(e) { 
    element.setAttribute('underMouse', ''); 
    }); 

window.oncontextmenu = function(e) { 
    chrome.contextMenus.update(
    contextMenu, 
    { 
     type: 'checkbox', 
     checked: element.getAttribute('underMouse') == 'true' 
    }); 
} 

如果你在當前焦點文本框只是有興趣,你也可以只改變你的菜單中focusblur事件。您可能還需要到'editable'選項檢查到contexts菜單屬性(不知道是什麼做,但聽起來像它可能限制菜單文本輸入元素)。

+0

這將更新每個地方的狀態,而不是相對於一個控件,我需要在不同的元素中顯示啓用/禁用。假設我在一個頁面中有兩個文本字段,如果在其中一個頁面中檢查菜單,當我打開上下文菜單時,它不應該顯示爲另一個頁面檢查。 – jijesh 2013-03-09 13:56:08

+0

我明白了。你不能趕上[右鍵單擊](http://stackoverflow.com/questions/9500743/js-detect-right-click-without-jquery-inline)(或其他上下文菜單事件),並改變它呢?我不確定在菜單已被顯示時它是否會更新。 – rhashimoto 2013-03-09 14:43:23

+0

您也可以使用輸入/離開事件來更新菜單。 – rhashimoto 2013-03-09 15:18:56