是的,Firefox 确实支持。只是在 Firefox 中,扩展可以是基于 xul、引导或基于 sdk 的,而 sdk 可能不支持扩展工作所需的一切。
以下解决方案适用于基于 xul 的扩展和引导扩展。
在我的引导扩展中我使用这个:
首先,定义一个tabProgressListener。 onLocationChange 就是你要找的东西
var tabProgressListener = {
onLocationChange: function (
/*nsIDOMXULElement*/ aBrowser,
/*nsIWebProgress*/ aWebProgress,
/*nsIRequest*/ aRequest,
/*nsIURI*/ aLocation) {
myExtension.handleTabLocationChanged(aBrowser, aLocation);
},
onProgressChange: function() {},
onSecurityChange: function() {},
onStateChange: function() {},
onStatusChange: function() {},
onRefreshAttempted: function(
/*nsIDOMXULElement*/ aBrowser,
/*nsIWebProgress*/ webProgress,
/*nsIURI*/ aRefreshURI,
/*long*/ aMillis,
/*boolean*/ aSameURI) {
// must return true to allow http-meta refreshes
return true;
},
onLinkIconAvailable: function() {}
};
然后在窗口加载时添加 tabProgressListener
var gBrowser = document.getElementById('content');
gBrowser.addTabsProgressListener(tabProgressListener);
最后记得去掉进度监听器
gBrowser.removeTabsProgressListener(tabProgressListener);
请注意,虽然我不是 addon-sdk 的粉丝,但编写 sdk 扩展比引导扩展要容易得多。