在我的 Firefox 扩展中,我想检测页面加载的来源——例如,在点击后:链接、历史条目或书签。到目前为止,我已经设法检测到点击链接并使用“后退/前进”历史按钮。
但是,我无法检测到对历史菜单项目的点击,更不用说点击历史库窗口中的项目(单击“显示所有历史记录”时弹出)。书签菜单和书签库窗口也有同样的问题。
是否有或多或少直接的方法来实现这一点?对于书签菜单,我可以考虑为所有书签添加一个点击监听器。
在我的 Firefox 扩展中,我想检测页面加载的来源——例如,在点击后:链接、历史条目或书签。到目前为止,我已经设法检测到点击链接并使用“后退/前进”历史按钮。
但是,我无法检测到对历史菜单项目的点击,更不用说点击历史库窗口中的项目(单击“显示所有历史记录”时弹出)。书签菜单和书签库窗口也有同样的问题。
是否有或多或少直接的方法来实现这一点?对于书签菜单,我可以考虑为所有书签添加一个点击监听器。
所有对历史记录和书签项目的点击(在主浏览器窗口和单独的窗口/侧边栏中)都将调用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
(您应该将其更改为您的扩展所独有的东西)。