gpt4 book ai didi

javascript - Firefox 扩展(观察者)- 仅触发 "http-on-modify-request"一次

转载 作者:行者123 更新时间:2023-11-28 06:47:10 25 4
gpt4 key购买 nike

实际上,我试图在用户按地址栏上的 ENTER 后以及 onLocationChange 之前立即捕获事件。我使用以下链接作为指导来设置观察者:https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions/XUL_School/Intercepting_Page_Loads ,并有类似于下面的内容。

但是,控制台会打印许多 URL,甚至图像和脚本。如何修改代码,使该功能仅触发一次或在地址栏更改或单击链接之前被禁用。

我想我可以设置自己的变量来跟踪 URL 上是否触发了请求,但想知道是否有更有效的解决方案。

var httpRequestObserver = {
ioService: Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService),

observe: function(subject, topic, data) {
if (topic == "http-on-modify-request") {

var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);

console.log(httpChannel.URI.spec);
}
},

register: function() {
this.observerService.addObserver(this, "http-on-modify-request", false);
},

unregister: function() {
this.observerService.removeObserver(this, "http-on-modify-request");
}
};

httpRequestObserver.register();

最佳答案

我最初使用“http-on-modify-request”观察者,因为它是修改请求 header 中引用地址的建议位置。不过,后来我意识到 Chrome 的 Web Request API 是可用的,并改用了以下代码。

const {WebRequest} = Cu.import("resource://gre/modules/WebRequest.jsm", {});

WebRequest.onBeforeSendHeaders.addListener(setReferrer, { types: ['main_frame'] }, ['blocking', 'requestHeaders']);

function setReferrer(e) {
//some other code

for (var i in e.requestHeaders) {
if (e.requestHeaders[i].name === 'Referer') {
e.requestHeaders.splice(i, 1);
break;
}
}

e.requestHeaders.push({name : 'Referer', value : 'myreferer.com'});
return { requestHeaders: e.requestHeaders };
}

关于javascript - Firefox 扩展(观察者)- 仅触发 "http-on-modify-request"一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33309902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com