http-on-examine-response 主题何时发布?
When is the http-on-examine-response topic issued?
我正在尝试使用这段相当常见的观察者代码检查 Firefox 插件中的 302 响应,但 http-on-examine-response
几乎从未在具有 302 重定向的页面上发出。
var httpRequestObserver = {
observe: function (subject, topic, data) {
console.log(topic)
if (topic == 'http-on-examine-response') {
subject.QueryInterface(Ci.nsIHttpChannel);
try {
this.handleRequest(subject);
} catch(error) {
console.error(error.message)
}
}
},
handleRequest: function(oHTTP) {
var uri = oHTTP.URI.asciiSpec;
console.log(oHTTP.responseStatus, uri);
}
};
Services.obs.addObserver(httpRequestObserver, 'http-on-modify-request', false);
唯一的主题 issued/printed 是 http-on-modify-request
,当您想要响应状态时,它是无用的。我收到这样的错误:
Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIHttpChannel.responseStatus]
抱歉,意大利面复制错误。 addObserver
方法的第二个参数应该是您希望在
上收到通知的主题
Services.obs.addObserver(httpRequestObserver, 'http-on-examine-response', false);
您似乎在尝试读取 HTTPChannel 中尚不可用的响应状态,尽管这很奇怪。
它在我的 requestmod 模块(在 NPM 上可用)中完美运行,该模块在 HTTP 通道观察器周围实现了一个类似 SDK 的包装器,我无法发现您的代码在哪些地方会以不同的方式处理事情。
或者我会建议使用 WebRequest.jsm,它是为扩展使用而设计的。特别是它的 onHeadersReceived 侦听器:https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/WebRequest.jsm#onHeadersReceived
您的代码如下所示:
let { WebRequest } = require("resource://gre/modules/WebRequest.jsm");
WebRequest.onHeadersReceived.addListener(function handleRequest(response) {
console.log(response.statusCode, response.url);
});
WebRequest.jsm 唯一的 "drawback" 是,它不适用于当前稳定版本的 Firefox,但很快就会改变...
另请注意,您应该在卸载扩展程序时再次删除侦听器 - 但同样的规则适用于观察者。
我正在尝试使用这段相当常见的观察者代码检查 Firefox 插件中的 302 响应,但 http-on-examine-response
几乎从未在具有 302 重定向的页面上发出。
var httpRequestObserver = {
observe: function (subject, topic, data) {
console.log(topic)
if (topic == 'http-on-examine-response') {
subject.QueryInterface(Ci.nsIHttpChannel);
try {
this.handleRequest(subject);
} catch(error) {
console.error(error.message)
}
}
},
handleRequest: function(oHTTP) {
var uri = oHTTP.URI.asciiSpec;
console.log(oHTTP.responseStatus, uri);
}
};
Services.obs.addObserver(httpRequestObserver, 'http-on-modify-request', false);
唯一的主题 issued/printed 是 http-on-modify-request
,当您想要响应状态时,它是无用的。我收到这样的错误:
Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIHttpChannel.responseStatus]
抱歉,意大利面复制错误。 addObserver
方法的第二个参数应该是您希望在
Services.obs.addObserver(httpRequestObserver, 'http-on-examine-response', false);
您似乎在尝试读取 HTTPChannel 中尚不可用的响应状态,尽管这很奇怪。 它在我的 requestmod 模块(在 NPM 上可用)中完美运行,该模块在 HTTP 通道观察器周围实现了一个类似 SDK 的包装器,我无法发现您的代码在哪些地方会以不同的方式处理事情。
或者我会建议使用 WebRequest.jsm,它是为扩展使用而设计的。特别是它的 onHeadersReceived 侦听器:https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/WebRequest.jsm#onHeadersReceived
您的代码如下所示:
let { WebRequest } = require("resource://gre/modules/WebRequest.jsm");
WebRequest.onHeadersReceived.addListener(function handleRequest(response) {
console.log(response.statusCode, response.url);
});
WebRequest.jsm 唯一的 "drawback" 是,它不适用于当前稳定版本的 Firefox,但很快就会改变...
另请注意,您应该在卸载扩展程序时再次删除侦听器 - 但同样的规则适用于观察者。