我正在使用' FF Addon SDK'将Chrome扩展程序移植到FF。在后台脚本(main.js)文件中,我需要使用FF等效的...
chrome.webNavigation.onBeforeNavigate.addListener()
和
chrome.tabs.onUpdated.addListener()
我注意到需要(" sdk / tabs")。只有打开,关闭,完成等,但与导航无关。
我看到一些使用Page-Mod的解决方案,或者展示了开发FF Extensions的旧XUL方法的解决方案。我特意寻找FF Addon SDK(仅)解决方案。
感谢任何输入。
编辑:我能够通过使用Progress Listener找出chrome.tabs.onUpdated.addListener()的替代方法。显然,在FF中它被称为onLocationChange。仍在寻找chrome.webNavigation.onBeforeNavigate.addListener()的替代方案答案 0 :(得分:1)
遗憾的是,chrome.webNavigation.onBeforeNavigate.addListener()没有任何合适的替代品。 一周前发现自己处于同样的境地。尝试使用nsIWebProgressListener.onStateChange进行STATE_START。没有按预期工作。 你最好的选择是: 1.)使用onLocationChange事件,它会为您提供正在加载的位置的URI。 2.)拦截Httprequest。过滤掉一个顶层并将其称为onbeginnavigate。
如果您找到其他方法,请告诉我。
答案 1 :(得分:1)
好的,我设法搞清楚了。我们需要使用onStateChange监听器。为了模仿onBeforeNavigation,我们不仅需要检查STATE_START,还需要检查STATE_IS_DOCUMENT。
var progressListener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
onLocationChange: function(aWebProgress, aRequest, aURI) {
if (aRequest && aURI) {
console.log('onLocationChange: ' + aURI.spec);
}
},
onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
var status = Ci.nsIWebProgressListener;
if(aStateFlags&status.STATE_START && aStateFlags&status.STATE_IS_DOCUMENT) {
console.log('onStateChange: ' + aRequest.QueryInterface(Ci.nsIChannel).originalURI.spec);
}
}
};
答案 2 :(得分:0)
您可以附加截图中的onBeforeUnload
/ onUnload
事件。