gpt4 book ai didi

javascript - 跟踪 JavaScript 中 URL 的重定向路径

转载 作者:行者123 更新时间:2023-12-01 09:01:20 26 4
gpt4 key购买 nike

我正在尝试查找浏览器中请求的 url 的重定向次数,如果可能的话,我想通过 javascript 跟踪该 URL 的重定向路径。

例如,如果我在浏览器中请求“A”。假设重定向流程为 A->B->C->D。意思是,它被重定向到“D”。在这种情况下,我需要获得三个 301 重定向状态代码和一个 200 ok 状态代码。

我在我的 addon.js 中尝试了以下方法(并为 firefox 浏览器制作了一个插件)。

var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
var StatusValue = req.status;

它给出 200 ok(我认为它是最终 url)。

是否可以通过 Javascript 获取 URL 的所有 301 重定向。

谢谢,

最佳答案

nsIXMLHttpRequest interface有一个类型为 nsIChannel 的成员 channel(只能由扩展程序访问) .您可以将自己的回调分配给它的 notificationCallbacks 属性并实现 nsIChannelEventSync interface接收重定向事件。沿着这些线的东西:

Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");

var req = new XMLHttpRequest();
req.open('GET', document.location);

var oldNotifications = req.channel.notificationCallbacks;
var oldEventSink = null;
req.channel.notificationCallbacks =
{
QueryInterface: XPCOMUtils.generateQI([
Components.interfaces.nsIInterfaceRequestor,
Components.interfaces.nsIChannelEventSink]),

getInterface: function(iid)
{
// We are only interested in nsIChannelEventSink, return the old callbacks
// for any other interface requests.
if (iid.equals(Ci.nsIChannelEventSink))
{
try {
oldEventSink = oldNotifications.QueryInterface(iid);
} catch(e) {}
return this;
}

if (oldNotifications)
return oldNotifications.QueryInterface(iid);
else
throw Components.results.NS_ERROR_NO_INTERFACE;
},

asyncOnChannelRedirect: function(oldChannel, newChannel, flags, callback)
{
var type = null;
if (flags & Components.interfaces.nsIChannelEventSink.REDIRECT_TEMPORARY)
type = "temporary";
else if (flags & Components.interfaces.nsIChannelEventSink.REDIRECT_PERMANENT)
type = "permanent";
else if (flags & Components.interfaces.nsIChannelEventSink.REDIRECT_INTERNAL)
type = "internal";

Components.utils.reportError("Redirect from " + oldChannel.URI.spec + " " +
"to " + newChannel.URI.spec + " " +
(type ? "(" + type + ")" : ""));

if (oldEventSink)
oldEventSink.asyncOnChannelRedirect(oldChannel, newChannel, flags, callback);
else
callback.onRedirectVerifyCallback(Cr.NS_OK);
}
};

req.send(null);

此代码确保在记录对 nsIChannelEventSync.asyncOnChannelRedirect 的任何调用时始终调用旧的通知回调。

供引用:nsIInterfaceRequestor , XPCOMUtils .

关于javascript - 跟踪 JavaScript 中 URL 的重定向路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11206967/

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