Javascript 如何检测历史记录或书签条目上的点击?

Javascript 如何检测历史记录或书签条目上的点击?,javascript,firefox,firefox-addon,dom-events,bookmarks,Javascript,Firefox,Firefox Addon,Dom Events,Bookmarks,在我的Firefox扩展中,我想检测页面加载的来源——例如,在点击链接、历史记录条目或书签之后。到目前为止,我已经成功地检测到点击链接并使用后退/前进历史按钮 但是,我无法检测到对历史菜单项的单击,更不用说对历史库窗口中的项的单击(单击“显示所有历史”时弹出)。书签菜单和书签库窗口也存在同样的问题 有没有一种更简单的方法来实现这一点?对于书签菜单,我可以考虑在所有书签中添加一个单击侦听器 所有对历史记录和书签项目(在主浏览器窗口和单独的窗口/侧栏中)的单击都将调用或(当用户从上下文菜单中明确选择

在我的Firefox扩展中,我想检测页面加载的来源——例如,在点击链接、历史记录条目或书签之后。到目前为止,我已经成功地检测到点击链接并使用后退/前进历史按钮

但是,我无法检测到对历史菜单项的单击,更不用说对历史库窗口中的项的单击(单击“显示所有历史”时弹出)。书签菜单和书签库窗口也存在同样的问题


有没有一种更简单的方法来实现这一点?对于书签菜单,我可以考虑在所有书签中添加一个单击侦听器

所有对历史记录和书签项目(在主浏览器窗口和单独的窗口/侧栏中)的单击都将调用或(当用户从上下文菜单中明确选择打开项目的位置时,将使用后者)。您可以使用以下方法扩展这些函数:

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;
}

对于另一个函数也是如此。请注意,每个浏览会话只应执行一次此操作-
placesuils
对象由所有浏览器窗口共享。这就是示例代码中的
myExtensionHooked
属性的用途(您应该将其更改为您的扩展所特有的内容)。

Hi-Wladimir!谢谢你的回答,很抱歉我迟了回复!我刚刚试过你的代码片段,它似乎工作得很好。我还没到我想去的地方,但你的建议确实让我更接近了!