2012-01-24 16 views
1

我有訪問Facebook圖形的問題。我正在使用Greasemonkey腳本。當我在chrome的Tampermonkey中使用相同的腳本時,它運行良好,我可以獲取數據。XMLHttpRequest訪問Facebook開發人員和圖形

在Firefox中沒有任何反應,我想也許是因爲跨域限制。我是對的嗎,有沒有辦法解決這個問題?

忘了提及,在Firefox中只有當我在graph.facebook.com時纔有效。

編輯:

var my_id = 1111111111; 
var req = new XMLHttpRequest(); 
req.open('GET', 'https://graph.facebook.com/'+my_id, false); 
req.send(); 
var contents = req.responseText; 
alert(contents); 

回答

0

XMLHttpRequest不支持跨域請求。 (你說這雖然工作在Tampermonkey ??!?Tampermonkey支持GM_xmlhttpRequest()所以威力已經擴展跨域XHR到XMLHttpRequest()也許

不過,爲了得到這個Greasemonkey的工作(和Chrome userscripts和Tampermonkey),您需要使用GM_xmlhttpRequest() - 它允許跨域請求。

因此,從問題的代碼將成爲:

var my_id = 1111111111; 

GM_xmlhttpRequest ({ 
    method:   'GET', 
    url:   'https://graph.facebook.com/' + my_id, 
    onload:   function (responseDetails) { 
         var contents = responseDetails.responseText; 
         alert (contents); 
        } 
}); 


注意GM_xmlhttpRequest()異步操作。 (它有一個有點冒險的同步模式,但不推薦)。基於觀察Facebook Graph

+0

非常感謝!這個作品完美! – user1165862

+0

是的,它在tampermonkey(從問題的例子)中工作,正如我所說,這是讓我困惑的! – user1165862

+0

另外一個'快速'問題:我如何在函數外部使用變量內容?我試圖定義它bellow var my_id,但它不起作用。 – user1165862

0

如果您正在使用XMLHttpRequest來發布信息,那麼這是極有可能通過同源策略(MDNWikipedia)引起的。

如果您所在的頁面不匹配你發送信息,然後Firefox和其他人很可能會阻止請求的地方1)協議(HTTP)2)結構域和3)端口。 (這就是爲什麼它只適用於你在graph.facebook.com上的原因。)

由於Facebook不太可能代表你支持cross origin resource sharing,所以你很可能倒黴。

Cookies和其他「環境驗證」與POST請求一起發送,因此瀏覽器執行此類策略的一個原因是爲了防止bookmarklet或Greasemonkey腳本能夠將Cookie發送到域後面的服務器他們給你。

+0

好,但它是如何在Chrome工作? – user1165862

+0

看起來你使用的是GET而不是POST,它有不同的規則,不受同樣的SOP策略的約束。 – buley

+0

我正在使用GET,與我在問題中寫入的示例相同。該代碼適用於Chrome,但不適用於Firefox ......這就是讓我困惑的原因。 – user1165862

0

確實允許CORS,因爲當我試圖GET-ING它,我返回狀態200和頭部有Access-Control-Allow-Origin:* *

使用螢火蟲:

請求:

xhr=new XMLHttpRequest(); 
xhr.open('get','https://graph.facebook.com/id',true); 
xhr.send(); 

標頭:

Response Headers 
Access-Control-Allow-Origin * 
Cache-Control private, no-cache, no-store, must-revalidate 
Connection keep-alive 
Content-Length 181 
Content-Type text/javascript; charset=UTF-8 
Date Tue, 19 Jun 2012 22:41:46 GMT 
Etag "some random string" 
Expires Sat, 01 Jan 2000 00:00:00 GMT 
Pragma no-cache 
X-FB-Debug some random string 
X-FB-Rev some random number 

Request Headers 
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Accept-Encoding gzip, deflate 
Accept-Language en-us,en;q=0.5 
Connection keep-alive 
DNT 1 
Host graph.facebook.com 
Origin http://localhost:8080 
Referer http://localhost:8080/login 
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 
相關問題