如何在302重定向的情况下从Greasemonkey的GM_xmlhttpRequest“onload”回调中找到请求URL?

时间:2013-01-10 06:00:49

标签: javascript greasemonkey asynccallback gm-xmlhttprequest

我的Greasemonkey脚本中有GM_xmlhttpReqeust函数设置如下(简化版)。

  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 documentation,可以在http://www.example2.com内部response.finalUrl回调中找到onload

有人可以指点我正确的Greasemonkey / JavaScript方式吗?

3 个答案:

答案 0 :(得分:2)

我在下面找到了一个愚蠢的解决方案,我希望它会起作用。

GM_xmlhttpRequest ( {
    synchronous:    false,
    method:         "HEAD",
    url:            "http://www.google.com",
    onload:         function (response) {
        console.debug (this.url);
    }
} );

答案 1 :(得分:2)

传递给response的{​​{1}}为an object with these key properties

  • readyState的
  • responseHeaders响应
  • responseText的
  • 状态
  • statusText
  • finalUrl

你想要onload,你会得到它:

finalUrl


修订/澄清问题的更新:

要获取/了解最初请求的网址,您必须在closure中致电GM_xmlhttpRequest ( { synchronous: false, method: "HEAD", url: "http://www.google.com", onload: function (response) { console.debug (response.finalUrl); } } ); 。像这样:

GM_xmlhttpRequest()

答案 2 :(得分:0)

指的是

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 ));
  };
}

然后你走了,类似的方式......

enter image description here