2011-08-14 47 views
11

我正在製作Chrome擴展程序,它從我自己的服務器中提取數據。它一次使用約4個httpRequests,但有時我得到控制檯錯誤,如下所示:Chrome擴展上的訪問控制 - 允許 - 來源

XMLHttpRequest cannot load http://apps.radionsm.lv/apps/system/index.php?request=now. Origin chrome-extension://egkddfmbidfobhchndockbhjancbpfkd is not allowed by Access-Control-Allow-Origin.對於所有人有時沒有。

如果我發送header('Access-Control-Allow-Origin: *');這會修復嗎?

回答

18

Chrome擴展具有兩個「模式」使跨域XHR請求時:

1)如果所訪問的manifest.json文件中的「許可」一節中 - 該請求不具有「 Origin「標題,並且它始終成功。 2)如果域不在「權限」中 - 請求包含一個值爲「chrome-extension:// ...」的「Origin」頭部。這表示請求是一個CORS請求,並且響應必須具有有效的Access-Control-Allow-Origin標頭才能成功。

25

您正在嘗試執行跨源資源共享(CORS)。壞消息是,如果沒有服務器作爲中間人,那麼在普通網頁上無法做到這一點。好消息是,在Chrome擴展中,您可以請求訪問您想要的任何網址的權限。只需在你的manifest.json文件中加入這樣的內容即可。

讓你的網站連接:

"permissions": [ 
    "http://*.radionsm.lv/" 
    ], 

允許任何站點連接:

"permissions": [ 
    "http://*/" 
    ], 

當用戶安裝擴展鑲邊將通知他們在一個對話框之前所需的權限安裝完成。

+9

值得一提 - 我必須刪除並重新安裝擴展程序,以便從清單文件更新權限。 –

+1

我在這裏提出了Geva Tal的評論,並且希望進一步強調你確實需要卸載你的擴展,然後重新安裝它。只需從Chrome中重新加載擴展程序是不夠的。 – erikprice