0

在我的Firefox擴展,我想檢測頁面加載的來源 - 例如,點擊後:一個鏈接,一個歷史條目或書籤。到目前爲止,我已經設法檢測鏈接上的點擊並使用「後退/前進」歷史記錄按鈕。如何檢測點擊歷史或書籤條目?

然而,我無法探測歷史上的菜單項點擊,更不用說點擊次數在歷史庫的窗口中的項目(單擊「顯示所有歷史記錄」時,彈出)。書籤菜單和書籤庫窗口的問題相同。

有或多或少直接的方式做到這一點?對於書籤菜單,我可以考慮爲所有書籤添加點擊偵聽器。

回答

1

歷史和書籤項目的所有點擊(無論是在主瀏覽器窗口和單獨窗口/工具欄)將調用PlacesUIUtils.openNodeWithEvent()PlacesUIUtils.openNodeIn()(當用戶明確選擇在哪裏從上下文菜單中打開該項目使用後者)。您可以使用這樣的方法擴展這些功能:

Components.utils.import("resource:///modules/PlacesUIUtils.jsm"); 
if (!("myExtensionHooked" in PlacesUIUtils.openNodeWithEvent)) 
{ 
    var origOpenNodeWithEvent = PlacesUIUtils.openNodeWithEvent; 
    PlacesUIUtils.openNodeWithEvent = function(node) 
    { 
    // Remember node.uri here - user chose this URL 
    ... 

    // Call original function 
    return origOpenNodeWithEvent.apply(this, arguments); 
    }; 
    PlacesUIUtils.openNodeWithEvent.myExtensionHooked = true; 
} 

和其他功能類似。請注意,每個瀏覽會話只能執行一次 - PlacesUIUtils對象由所有瀏覽器窗口共享。這就是示例代碼中myExtensionHooked屬性的用途(您應該將其更改爲您的擴展所特有的內容)。

+0

嗨弗拉基米爾!感謝您的回答,併爲我遲到的回覆感到抱歉!我剛剛試過你的代碼片段,它似乎工作得很好。我不是那裏我想要的地方,但是你的建議確實讓我更加接近! – Christian