【问题标题】:How do I get the target URL of a redirect when requesting resources from a Chrome extension?从 Chrome 扩展程序请求资源时,如何获取重定向的目标 URL?
【发布时间】:2011-12-23 05:40:26
【问题描述】:

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

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

在 Google Chrome 中,GM_xmlhttpRequest 是跨域 XMLHttpRequest 的包装器,响应对象根本不知道“真实”的 URL。

那么,有没有其他方法可以从用户脚本/扩展中获取重定向目标?

【问题讨论】:

    标签: google-chrome-extension xmlhttprequest greasemonkey


    【解决方案1】:

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

    (假设Facebook Desktop Flow 的例子,成功的URL 是https://www.facebook.com/connect/login_success.html)。您需要将tabs和 URL 添加到您的权限 - 例如:

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

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

    步骤 1

    向选项卡更新添加一个侦听器,该侦听器在所有选项卡中搜索成功 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;
                                }
                            }
                        });
    });
    

    第二步

    将用户重定向到 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);
    

    【讨论】:

      【解决方案2】:

      检查标题并获取location ?

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

      这就是我在没有看到你的代码的情况下能想到的。

      【讨论】:

      • 只有一个问题:XHR 遵循所有重定向(根据规范),您永远看不到“Location”标题。
      猜你喜欢
      • 2013-12-31
      • 1970-01-01
      • 2018-08-21
      • 2012-07-31
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2012-03-17
      相关资源
      最近更新 更多