文章

Greasemonkey xhr redirection in Firefox 3

I found that my rssget script is not working in Firefox 3 beta for some of the link. After some investigation, the cause seems to be the difference in redirection handling. In Firefox 2, when GM_xmlhttpRequest() is fired, it would follow status like 302 to do the redirection to return the correct page response to the onload function. However, in Firefox 3, the onload would receive a status like 302 and thus the script would fail.

I don’t know whether it is the responsibility for the browser or the script to handle redirection like this. I have changed the script itself to follow the redirection. The code is like:


 GM_xmlhttprequest({
    method:"GET",
    url: url,
    onload: function(response){
        if(response.status  301 || response.status  302 || response.status == 303){
            var loc = /Location: ([^n]*)n/.exec(response.responseHeaders)[1];
            GM_xmlhttprequest({
                method:"GET", 
                url:loc,
                onload:arguments.callee
            });
            return;
        }
        //go on with normal parsing...
    }
 })

I’ve only included status 301 to 303 for the time being. Then it will try to get the ‘Location’ from its header and finally invoke another GM_xmlhttpRequest(). A little trick here is to use arguments.callee to recur itself.

The updated script is tagged as 1.5 in the code site . You will only need it if your script fail in Firefox 3.

*