1

我正在构建一个 chrome 扩展,允许用户选择 Facebook 帖子并将它们发送到服务器。

我有一个 XMLHTTPRequest 发送到 Facebook,以便接收访问令牌,如下所示:

function GetToken() {
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID_HERE&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token");
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
        xxxxxxxxxxxxxxxxxx
        xhr.close;
    }
}

}

发送到服务器的 XMLhttpRequest 是成功的,我确实收到了一个访问令牌作为响应,但我不知道如何访问它。

如果我在 chrome 上打开控制台窗口并选择网络选项卡,我可以看到正在发送的请求,以及正在接收的响应(使用访问令牌)但它作为 URL 片段接收,我不知道如何访问它。

GetToken 函数在内容脚本中执行,如果这会有所不同。

编辑:

xhr.responseText 如下

成功
安全警告:请将上面的 URL 视为您的密码,不要与任何人共享它。setTimeout(function() {window.history.replaceState && window.history.replaceState({}, "", "blank.html # = ");},500);

xhr.responseXML 如下

空值

4

2 回答 2

1

我已经解决了这个问题,您无法访问 xmlhttprequest 响应的 URL 片段。

所以我所做的是,当单击我的扩展按钮时,会打开一个带有以下 URL 的新选项卡,然后立即执行一个内容脚本,以便在删除 URL 片段之前获取它。

    chrome.browserAction.onClicked.addListener(function(tab) {
var Token_url = "https://www.facebook.com/dialog/oauth?client_id=MY_APP_ID_HERE&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token";
    chrome.tabs.create({ "url": Token_url, "index": tab.tabId });
    chrome.tabs.executeScript(tab.tabId, { file: 'FbToken.js', runAt: 'document_start' });
});

FbToken.js 是一个简单的文件,其中包含:

var AccessToken = window.location.hash;

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "AccessToken")
sendResponse({ Token: AccessToken });
});
于 2013-08-14T12:31:56.353 回答
0

您能否发布您的回复,执行 console.log(xhr.response, xhr.responseText) 并在此处发布(使用一些虚拟数据进行相应修改)?我认为你需要操纵一些字符串来获得你需要的值。

于 2013-08-13T08:00:40.993 回答