Avi*_*ran 43 javascript httprequest firefox-addon
我一直在尝试这个很长一段时间,并没有很好的结果.
var myObserver = {
observe: function(subject, topic, data)
{
if (topic == "http-on-examine-response")
{
// implement later
}
else if(topic == "http-on-modify-request")
{
// implement later
}
},
QueryInterface : function (id)
{
if (id.equals(Components.interfaces["nsIObserver"]) ||
id.equals(Components.interfaces["nsISupports"]))
{
return this;
}
throw Components.results.NS_NOINTERFACE;
}
};
var obs = new Service("observer-service", "ObserverService");
obs.addObserver(myObserver, "http-on-modify-request", false);
Run Code Online (Sandbox Code Playgroud)
基本上,http-on-modify-request我知道如何检查URI,找出与之关联的窗口(如果有的话)以及其他一些东西.我无法弄清楚的是如何重定向请求,我知道这是可能的,因为我可以在发出任何请求之前获得nsIHttpChannel.
谁知道该怎么办?:/我一直试着打了几个星期,然后无处可去.
我的印象是,您不能在这个级别执行此操作 - 我尝试了各种从外部“欺骗”需要创建 nsIHttpChannel 的代码的方法(示例位于帖子末尾)。
我建议的是,如果您想要重定向,请联系频道的所有者窗口(99% 的情况下都有效),并指示它进行重定向。我知道它的行为不会相同,但由于我不知道你为什么要这样做,所以这在外部(对用户来说)似乎正在做与你所要求的相同的事情。
这是我尝试的基础知识:
if(aTopic == "http-on-examine-response") {
var request = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);
if(!request.URI.spec.match("^http://www.apple.com/")) {
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var ch = ios.newChannel("http://www.apple.com/", null, null);
var listener = {
QueryInterface : XPCOMUtils.generateQI([Ci.nsIChannelEventSink]),
onDataAvailable: function() {},
onStopRequest: function() {},
onStartRequest: function() {}
};
ch.asyncOpen(listener,null);
var eventSink = request.notificationCallbacks.getInterface(Ci.nsIChannelEventSink);
eventSink.asyncOnChannelRedirect(request,ch,Ci.nsIChannelEventSink.REDIRECT_INTERNAL,function() {});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3904 次 |
| 最近记录: |