gpt4 book ai didi

javascript - httpChannel.redirectTo() 无限加载

转载 作者:行者123 更新时间:2023-12-02 17:10:51 24 4
gpt4 key购买 nike

我第一次开发 Firefox 扩展,多亏了文档,它进展得相当快。但是我有一个问题:如果用户访问某些域,我不想重定向他们。

const {Cc, Ci, Cr, Cu} = require("chrome");
const buttons = require('sdk/ui/button/action');
const tabs = require("sdk/tabs");



var httpRequestObserver =
{
observe: function(subject, topic, data)
{
if (topic == "http-on-modify-request") {
var httpChannel = subject.QueryInterface(Ci.nsIHttpChannel);
var eTLDService = Cc["@mozilla.org/network/effective-tld-service;1"].getService(Ci.nsIEffectiveTLDService);
var suffix = eTLDService.getPublicSuffixFromHost(httpChannel.originalURI.host);
var regexp = new RegExp('google\.'+suffix,'i');
if (regexp.test(httpChannel.originalURI.host)) {
Cu.import("resource://gre/modules/Services.jsm");
httpChannel.redirectTo(Services.io.newURI("http://test.tld", null, null));
}


}



get observerService() {
return Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
},

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

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

httpRequestObserver.register();

我正在尝试做一些 POC,但它似乎会无限期加载。

你知道我做错了什么吗?

最佳答案

不要测试原始URI!它将留下the same even after a redirect

/**
* The original URI used to construct the channel. This is used in
* the case of a redirect or URI "resolution" (e.g. resolving a
* resource: URI to a file: URI) so that the original pre-redirect
* URI can still be obtained. ...
*/

因此,您重定向,创建一个具有相同originalURI但不同URI的新 channel ,因此您的测试会一次又一次地触发...导致无限重定向循环(并且通过此 API 进行的重定向也不受通常的重定向限制)。

而是测试 channel 的 .URI,它给出当前 URI。

关于javascript - httpChannel.redirectTo() 无限加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24838577/

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