Как найти URL-адрес запроса изнутри обратного вызова "onload" Greasemonkey GM_xmlhttpRequest в случае перенаправления 302?
У меня есть GM_xmlhttpReqeust
Настройка функции следующим образом (упрощенная версия) в моем скрипте Greasemonkey.
GM_xmlhttpRequest({
synchronous: false,
method: "HEAD",
url: "http://www.example1.com",
onload: function(response){console.debug(url);},
});
GM_xmlhttpReqeust
вызывается в асинхронном режиме в моем коде.После доступа,
http://www.example1.com
302 перенаправляет наhttp://www.example2.com
Я хотел бы получить доступ к стоимости оригинала
url
параметр (http://www.example1.com
) внутриonload
функция обратного вызова.Согласно
GM_xmlhttpReqeust
документация,http://www.example2.com
можно найти вresponse.finalUrl
внутриonload
Перезвоните.
Может кто-нибудь указать мне правильный путь Greasemonkey/JavaScript?
3 ответа
response
перешел к onload
это объект с этими ключевыми свойствами:
- readyState
- responseHeaders
- responseText
- статус
- его статус
- finalUrl
Ты хочешь finalUrl
Вы получаете это как:
GM_xmlhttpRequest ( {
synchronous: false,
method: "HEAD",
url: "http://www.google.com",
onload: function (response) {
console.debug (response.finalUrl);
}
} );
Обновление для пересмотренного / уточненного вопроса:
Чтобы получить / узнать первоначально запрошенный URL, вы должны позвонить GM_xmlhttpRequest()
в закрытии. Вот так:
var origURL = "http://www.google.com";
(function (targURL) {
GM_xmlhttpRequest ( {
synchronous: false,
method: "HEAD",
url: targURL,
onload: function (response) {
console.log ("orig URL: ", targURL);
console.log ("final URL: ", response.finalUrl);
}
} );
} ) (origURL);
Я получил глупое решение ниже, я надеюсь, что оно будет работать.
GM_xmlhttpRequest ( {
synchronous: false,
method: "HEAD",
url: "http://www.google.com",
onload: function (response) {
console.debug (this.url);
}
} );
Ссылаясь на
http://userscripts-mirror.org/topics/51161
Во-первых, вам нужно:
var method = this;
var oldargs = [].slice.call( arguments, 1 );
return function () {
var newargs = [].slice.call( arguments );
return method.apply( thisObject, oldargs.concat( newargs ));
};
}
Тогда вы идете, аналогичным образом...