我正在开发跨浏览器的用户脚本/扩展程序。我尝试从该脚本中获取我查询的URL的重定向目标。
现在,使用Firefox和GreaseMonkey,这很容易,因为GM_xmlhttpRequest的响应对象具有属性finalUrl
。
在谷歌浏览器中,GM_xmlhttpRequest是支持跨域的XMLHttpRequest的包装器,响应对象根本不知道“真正的”URL。
那么,是否有不同的方法从用户脚本/扩展中获取重定向目标?
答案 0 :(得分:0)
如果您知道重定向网址,则可以使用为扩展程序提供的google.*
API对其进行解析。
(我们假设Facebook Desktop Flow的示例,其中成功网址为https://www.facebook.com/connect/login_success.html
)。您需要将tabs
和网址添加到您的权限中 - 例如:
"permissions": [
"tabs",
"https://facebook.com/connect/*"
]
当用户点击登录/验证按钮时,您需要执行两个步骤:
为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;
}
}
});
});
将用户重定向到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);
在没有看到您的代码的情况下,我可以考虑所有这些。