2012-09-06 89 views
0

我試圖開發一個ff插件,它允許用戶右鍵單擊表單元素並執行與其關聯的任務。爲表單輸入顯示強制上下文菜單

不幸的是,有人認爲上下文菜單不應該出現在ff中的表單輸入,儘管長時間的討論https://bugzilla.mozilla.org/show_bug.cgi?id=433168,他們仍然不出現複選框,收音機或選擇。

我的確找到這個:https://developer.mozilla.org/en-US/docs/Offering_a_context_menu_for_form_controls但我想不出如何翻譯代碼以使用新的附加SDK。 我試圖將JavaScript顯示爲內容腳本並通過觀察者服務,但無濟於事。

我也無法找到推薦的擴展https://addons.mozilla.org/en-US/firefox/addon/form-control-context-menu/的來源,它認爲它是'專門爲演示如何做到這一點而創建的',這非常令人沮喪。

這似乎是非常基本的插件功能,任何幫助或鏈接到更簡單的文檔將不勝感激。

**更新**

我添加一個文件下面的代碼,從主要要求,似乎這樣的伎倆。

var {WindowTracker} = require("window-utils"); 

var tracker = WindowTracker({ 
    onTrack: function(window){ 
    if (window.location.href == "chrome://browser/content/browser.xul") {  
     // This is a browser window, replace 
     // window.nsContextMenu.prototype.setTarget function 
     window.setTargetOriginal = window.nsContextMenu.prototype.setTarget; 

     window.nsContextMenu.prototype.setTarget = function(aNode, aRangeParent, aRangeOffset) { 
     window.setTargetOriginal.apply(this, arguments); 
     this.shouldDisplay = true; 
     }; 
    }; 
    } 
, onUntrack: function(window) { 
    if (window.location.href == "chrome://browser/content/browser.xul") { 
     // In case we were called because the extension is uninstalled - restore 
     // original window.nsContextMenu.prototype.setTarget function 
     window.nsContextMenu.prototype.setTarget = window.setTargetOriginal; 
    }; 
    } 
}); 

不幸的是,這仍然沒有提供禁用輸入的上下文菜單,但這不是一個顯示屏。

非常感謝

+1

您提到的擴展程序的來源可以從網上查看。在擴展的頁面上,向下滾動到「版本信息」部分,展開它,然後單擊_查看擴展的Source_鏈接。然後您可以瀏覽擴展的源代碼。 –

+0

謝謝你。不幸的是,將它翻譯成新的SDK代碼就是我迷路了! – Arth

回答

2

的代碼在此擴展的重要棋子可以看出here。它非常簡單 - 它取代每個瀏覽器窗口中的nsContextMenu.prototype.setTarget函數,並確保它爲表單控件設置shouldDisplay標誌。

將其轉換爲附加SDK的唯一問題是高級模塊不能直接訪問瀏覽器窗口。您必須使用已棄用的window-utils模塊。像這樣的東西應該工作:

var {WindowTracker} = require("sdk/deprecated/window-utils"); 
var tracker = WindowTracker({ 
    onTrack: function(window) 
    { 
    if (window.location.href == "chrome://browser/content/browser.xul") 
    { 
     // This is a browser window, replace 
     // window.nsContextMenu.prototype.setTarget function 
    } 
    }, 

    onUntrack: function(window) 
    { 
    if (window.location.href == "chrome://browser/content/browser.xul") 
    { 
     // In case we were called because the extension is uninstalled - restore 
     // original window.nsContextMenu.prototype.setTarget function 
    } 
    } 
}); 

注意WindowTracker應該是replaced in some future SDK version。另外,僅供參考:nsContextMenu implementation

+0

非常感謝您的幫助,如果您有興趣,請參閱上面的編輯! – Arth

+0

現在這不工作?對我來說...... –

+0

@VitalyZdanevich:附加SDK在三年內發生了很大變化。我改變了我的答案,它應該再次運作,但有問題的API已被棄用。 –