0

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

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

是否有或多或少直接的方法来实现这一点?对于书签菜单,我可以考虑为所有书签添加一个点击监听器。

4

1 回答 1

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(您应该将其更改为您的扩展所独有的东西)。

于 2012-05-29T12:25:04.773 回答