Как получить целевой URL перенаправления при запросе ресурсов из расширения Chrome? - PullRequest
4 голосов
/ 07 ноября 2011

Я работаю над кросс-браузерным пользовательским скриптом / расширением. Я пытаюсь получить цель перенаправления URL-адреса, который я запрашиваю из этого сценария.

Теперь, используя Firefox и GreaseMonkey, это легко, потому что объект ответа GM_xmlhttpRequest имеет свойство finalUrl.

В Google Chrome GM_xmlhttpRequest является оберткой вокруг междоменного XMLHttpRequest, и объект ответа вообще не знает «реального» URL.

Итак, есть ли другой способ получить цель перенаправления из пользовательского скрипта / расширения?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2012

Осмотрите заголовки и получите location?

Как и в

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

Это все, что я могу думать, не видя твой код.

0 голосов
/ 16 декабря 2011

Если вам известен 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;
                            }
                        }
                    });
});

Шаг 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);
...