2012-07-12 22 views
2

問題是,當腳本在網頁上時,它通常是從網上獲取的,但是當代碼位於userscript中,即作爲插件的一部分時,它突然忘記了Access-Control-Allow-Origin: *標題並停止響應跨域請求。無法管理在最新的(stable 12和beta v。1497)歌劇中在userjs(注入的腳本)中執行跨域xmlhttprequest,它是一個錯誤嗎?

下面是一些代碼,說明了這一點:

// ==UserScript== 
// @include  *nasa.gov* 
// ==/UserScript== 

var xhr = new window.XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
    alert('state changed: ' + this.readyState + "\nstatus: " + this.status); 
}; 
xhr.onload = function(){ 
    alert('document loaded'); 
}; 
xhr.open('GET','http://apod.nasa.gov'); 
xhr.send(null); 

我選擇APOD網站,因爲它沒有得到b &W¯¯現代網站,所以沒有需要過濾的事件。

而且在這種狀態下它的工作原理,好的但是當我指出這一點的URL到我的服務器,從每一個網站接受呼叫,它忽略允許原產頭...

好吧,它是一個錯誤,或者我在這裏做錯了什麼?也許在請求中有一些選項可以「保證」它可以去那裏嗎?我不知道像xhr.allowcrossdomainaccess = true或其他什麼?

+0

你試過這個網頁(確切的網址)嗎? – Bergi 2012-07-12 13:25:41

+0

http://apod.nasa.gov/ - 這是userscript,所以我選擇了一個可能沒有觸發js事件的所有功能的頁面,因爲它會讓我的例子變得更難。 – rsk82 2012-07-12 13:31:15

+0

嗯,像一個魅力執行您的腳本(在Opera的控制檯)在http://apod.nasa.gov/apod/astropix.html – Bergi 2012-07-12 13:34:05

回答

1

(你已經想通了這一點 - 但只給了這個問題一個合適的回答。)

注入腳本的頁面與運行(大部分)正常安全特權 - 相同頁面的腳本做。因此,您通常無法從注入的腳本執行跨域請求。

另請參閱https://stackoverflow.com/a/9614760/163549在Opera中的CORS實現狀態。

相關問題