从Chrome扩展程序请求资源时,如何获取重定向的目标网址?

时间:2011-11-06 20:49:03

标签: google-chrome-extension xmlhttprequest greasemonkey

我正在开发跨浏览器的用户脚本/扩展程序。我尝试从该脚本中获取我查询的URL的重定向目标。

现在,使用Firefox和GreaseMonkey,这很容易,因为GM_xmlhttpRequest的响应对象具有属性finalUrl

在谷歌浏览器中,GM_xmlhttpRequest是支持跨域的XMLHttpRequest的包装器,响应对象根本不知道“真正的”URL。

那么,是否有不同的方法从用户脚本/扩展中获取重定向目标?

2 个答案:

答案 0 :(得分:0)

如果您知道重定向网址,则可以使用为扩展程序提供的google.* API对其进行解析。

(我们假设Facebook Desktop Flow的示例,其中成功网址为https://www.facebook.com/connect/login_success.html)。您需要将tabs和网址添加到您的权限中 - 例如:

"permissions": [
    "tabs",
    "https://facebook.com/connect/*"
]

当用户点击登录/验证按钮时,您需要执行两个步骤:

第1步

为Tab更新添加一个监听器,在所有选项卡中搜索成功URL:

chrome.tabs.onUpdated.addListener(function() {
    var lis = this; 
    chrome.tabs.getAllInWindow(null, function(tabs) {
                        for (var i = 0; i < tabs.length; i++) {
                            if (tabs[i].url.indexOf("https://www.facebook.com/connect/login_success.html") == 0) {
                                var token = tabs[i].url.match(/[\\?&#]auth_token=([^&#])*/i)
                                chrome.tabs.onUpdated.removeListener(lis);
                                return;
                            }
                        }
                    });
});

第2步

将用户重定向到OAUTH页面:

chrome.tabs.create(
    {
    'url': "https://www.facebook.com/dialog/oauth?client_id=client_id>&redirect_uri=https://www.facebook.com/connect/login_success.html"
    }, null);

答案 1 :(得分:0)

检查标题并获取location

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

在没有看到您的代码的情况下,我可以考虑所有这些。