我有一个简单的firefox插件(addon-sdk),如果内容类型的响应与一组内容类型匹配,它会侦听http resposes和blocks。现在,当我对收听图像,javascript文件和ajax(XHR)响应不感兴趣时,观察者会收听所有响应。我可以以某种方式过滤掉或至少发现响应属于XHR请求,这样我就不会浪费资源来处理响应。
在chrome扩展中可以实现类似的功能,其中" details.type"可以是main_frame,image,xhr等。
httpResponseObserver =
{
observe: function(subject, topic, data)
{
if (topic == "http-on-examine-response")
{
var channel = subject.QueryInterface(Ci.nsIHttpChannel);
var contentType;
try {
contentType = channel.getResponseHeader('Content-Type');
if (/\b(?:xml|rss|javascript|vnd|json|html|text|image|ocsp|x-shockwave-flash)\b/.test(contentType))
{
return;
}
}
catch(error) {
return;
}
}
}
答案 0 :(得分:3)
从nsIXMLHttpRequest
notificationCallbacks
界面
var isXHR;
try{
var channel = subject.QueryInterface(Ci.nsIHttpChannel);
var callbacks = channel.notificationCallbacks;
var xhr = callbacks ? callbacks.getInterface(Ci.nsIXMLHttpRequest) : null;
isXHR = !!xhr;
}
catch(e){
isXHR = false;
}
答案 1 :(得分:1)
channel.cancel(Components.results.NS_BINDING_ABORTED);
所以把它放在你的回归线之前,如果:)
检测什么样的请求,即图像ajax你必须检查标志: 看这里的代码做ctrl + f处理并查看那些标志
对于ajax / xhr我做过一段时间的测试,这是标志的组合来识别它:
LOAD_REQUESTMASK |
LOAD_BACKGROUND |
INHIBIT_PIPELINE |
LOAD_EXPLICIT_CREDENTIALS |
DISPOSITION_ATTACHMENT
//so tested on w3schools, if flags come out to be this above, then it is an ajax request, can have INHIBIT_CACHING flag
PLZ分享你对我学习感兴趣的所有发现