2012-03-23 92 views
0

我正在編寫需要訪問使用oAuth 2.0進行身份驗證的minus.com的Chrome擴展的代碼,所以我編寫了一個JavaScript文件'test.js',然後將其包含在HTML文件'test.html'中,然後在Chrome中加載'test.html'以測試用於驗證的JavaScript代碼。Chrome中的錯誤:「原始文件://不被Access-Control-Allow-Origin允許」

的「test.js」看起來像這樣的結構:

function Ajax(url, options) { 

// some function content 

    // Sending data 
    if (options.method === "POST" && (options.params || options.binaryData)) { 
     if (options.binaryData) { 
      xhr.sendAsBinary(options.binaryData); 
     } else { 
      xhr.send(hashToQueryString(options.params)); 
     } 
    } else { 
     xhr.send(null); 
    } 

    return xhr; 
} 

function refreshToken(refresh_token) { 
    var params = { 
     'grant_type': 'refresh_token', 
     'client_id': API_KEY, 
     'client_secret': API_SECRET, 
     'refresh_token': refresh_token, 
     'scope': 'read_all modify_all upload_new' 
    } 

    new Ajax("https://minus.com/oauth/token", { 
     params: params, 

     onSuccess: function(response) { 
      console.log(response.access_token); 
     }, 

     onError: function(response) { 
      console.log('error: wrong_token'); 
     } 
    });    
} 

refreshToken(); 

當我加載Chrome中的「的test.html」測試「test.js」,它促使在控制檯的錯誤,說「XMLHttpRequest無法加載https://minus.com/oauth/token?...原始文件://不被Access-Control-Allow-Origin允許。」我嘗試使用「--allow-file-access-from-files」或「--disable-web-security」選項啓動Chrome,但它沒有解決問題。但是,如果我在「Ajax」函數中評論了「發送數據」部分,則沒有錯誤。

有沒有人有想法這裏發生了什麼?

謝謝!

+1

我相信你正在調用你的請求跨域。如果您這樣做,Chrome瀏覽器將發出此錯誤。 – Raptor 2012-03-23 03:04:03

+0

那麼如何解決這個問題? – chaohuang 2012-03-23 03:07:00

回答

1

您可以通過將您的應用程序設置爲支持跨域調用的打包應用程序來解決此問題。託管的應用程序不。

您可能還需要閱讀Cross-Origin XMLHttpRequest in chrome extensions

+0

Hi Marius,我已將我的擴展程序打包到.crx文件中,但我不知道如何將其加載到Chrome中。似乎在Chrome擴展頁面中只有「加載解壓擴展名」選項。 – chaohuang 2012-03-25 03:54:27

+0

@ chaohuang只需將它拖放到Chrome上即可安裝。不過,如果它是一個crx而不是解壓縮的擴展名,它並沒有什麼區別。 Marius的意思是,如果你的擴展是一個託管的應用程序,你不會得到跨域請求,但它似乎並不是你的情況。 – Stefano 2012-03-25 16:43:16

+0

我認爲只是試圖打開crx文件(文件 - >打開文件)將安裝它,但拖放應該工作以及斯特凡諾說。 – 2012-03-28 13:24:06

2

要非常具體的關於您的問題:你需要添加你希望能夠跨域訪問到您的擴展清單中的主機:

http://code.google.com/chrome/extensions/xhr.html

{ 
    "name": "My extension", 
    ... 
    "permissions": [ 
    "https://*.minus.com/" 
    ], 
    ... 
} 

上的側編輯

請注意,當我有很多擴展活動時,我有時會在我的瀏覽器中出現奇怪的跨域錯誤。然後,我必須禁用至少一對,刷新擴展,它的工作原理 - 或者有時重新啓動鉻。

+0

嗨,Stefano,我已經按照您的建議將主機域名「https://*.minus.com/」添加到'manifest.json'文件中,但錯誤更改爲「Origin chrome-extension:// imoialplpijakfpmofocnamgopchikjk Access-Control-Allow-Origin不允許「。我還有什麼遺漏嗎?謝謝! – chaohuang 2012-03-25 03:33:53

+0

@chaohuang你究竟如何「加載」test.html?它是您的背景頁面,瀏覽器操作還是...? (它應該在任何情況下工作,但...) – Stefano 2012-03-25 16:39:30

+0

'test.html'是我的背景頁面。 – chaohuang 2012-03-25 17:17:25

相關問題