2014-06-23 70 views
1

我正在使用Addon SDK開發一個Firefox附加組件,我想在所有網站上包含除Google圖像之外的圖像的上下文菜單項,爲此我將添加一個不同的上下文菜單條目。爲所有網站創建上下文菜單條目

var cm = require("sdk/context-menu"); 

cm.Item({ 
    label: "LABEL", 
    context: [ 
    cm.URLContext(["*.images.google.*"]), 
    cm.SelectorContext("img") 
    ], 
    contentScript: googleContentScript , 
    onMessage: ... 
}); 

cm.Item({ 
    label: "LABEL", 
    context: [ 
    cm.URLContext(["*"]), 
    cm.SelectorContext("img") 
    ], 
    contentScript: otherContentScript , 
    onMessage: ... 
}); 

對於第一個URLContext,我想要捕獲所有Google圖像,而不管TLD(.com,.co.uk ...)。 對於第二個,我希望能夠將URLContext應用於所有不在第一個的URL。

顯然這不是目前正在發生的事情。 任何幫助,將不勝感激。

+0

URLContext是否需要RegEx?如果它讓我知道,我可以幫助你 – Noitidart

+0

@Noitidart,[它支持](https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/context-menu#URLContext %28matchPattern%29)有點有限[full-match regexp](https://developer.mozilla.org/en-US/Add-ons/SDK/Low-Level_APIs/util_match-pattern#Regular_Expressions)。但是如果你非常渴望幫助你爲什麼沒有親自看過文檔? – nmaier

+0

我正在絞盡腦汁__ [這裏](http://w-shadow.com/blog/2006/10/01/manipulating-taskbar-buttons/comment-page-2/#comment-467865 )__。如果我做到了這一點,將有助於成千上萬的人,所以我更有動力:P哈哈。我沒有太多瞭解,但我的正則表達式失敗了,所以立即放棄哈哈。 – Noitidart

回答

3

match patterns對於URLSelector是有限的,很難處理,當涉及到模式。

你要合理的選擇:

  • 你一個在你的內容腳本執行self.on("context", function() ...)。返回false將使菜單項不顯示。

每當即將顯示上下文菜單時,內容腳本中會發出一個名爲「context」的特殊事件。如果爲此事件註冊偵聽器函數並返回true,則與該偵聽器的內容腳本關聯的菜單項將顯示在菜單中。

  • 如果你將Firefox 29+,然後用PredicateContext可能會更容易(維護),併產生更好的性能(因爲它不需要發起並辦理內容腳本)。
+0

謝謝:)我有一半試圖掩蓋你,但失敗了:P – Noitidart

+0

@nmaier,所以你說我不應該使用URLContext,而是檢查谷歌內容腳本中的Google域名'self.on( 「context」,function()...)函數返回true,否則返回false。雖然其他內容腳本將是相同的,但返回相反的值? – RELnemtzov

+1

如果Google模式可以很容易地轉換爲有效的'URLContext',那麼我會在效率更高之前使用它。現在它包含多個通配符,所以它不完全有效(正則表達式可以工作)。對「其他」模式是:使用'self.on(「context」,...)'或'PredicateContext' – nmaier