我在圖書館多重帳戶登入這個 Chrome 擴充功能裡面,會去讀取 Dropbox 的一個檔案,

不過最近因為 Dropbox 將 Public 目錄設成非公開分享,

因此重新去取得了新的分享連結,再讓擴充功能去讀取,

但 Chrome 則在 console 裡吐出了下面的錯誤訊息:

XMLHttpRequest cannot load https://www.dropbox.com/s/mdxf2ng8xlegivc/NewTaipeiCityLibraryMultiLogin_LibraryOffDates.json?raw=1. Redirect from 'https://www.dropbox.com/s/mdxf2ng8xlegivc/NewTaipeiCityLibraryMultiLogin_LibraryOffDates.json?raw=1' to 'https://dl.dropboxusercontent.com/content_link/wtGZxHUxJucns4bXd9m9apSuGVB6Qo7E11T2WwZhboaZNopKXUWFxMmGtEByF7ZO/file' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'chrome-extension://njmkhmgdnaoomcbcgfdkeeonhdfomnda' is therefore not allowed access.

 

參考了一下 Chrome: Cross-Origin XMLHttpRequest

提到這個是指一般網頁會受到 same origin policy 的限制,

(CORS 指的是 Cross-Origin Resource Sharing)

但 Chrome 擴充功能較不受此限,只要在 manifest.json 裡有定義好對應的權限就可以了~

 

打開現在的 manifest.json 來看看,目前允許的權限是可以去讀取 http:// 開頭的網址:

{
    "name":             "圖書館多重帳戶登入",
    "permissions":      [
                            "http://*/*"
                        ]
}

 

看來可能是因為 Dropbox 的新的分享連結是使用 https:// 開頭的,因此擴充功能沒有權限去讀

(雖然這個推論還是有點奇怪,因為原本的 Dropbox Public 目錄分享連結也是 https:// 開頭的)

修正方式是將 https:// 也加入 permissions 之中:

{
    "name":             "圖書館多重帳戶登入",
    "permissions":      [
                            "http://*/*",
                            "https://*/*"
                        ]
}

 

將擴充功能重新載入之後,就能成功讀到 Dropbox 分享出來的檔案,

錯誤訊息也不再出現囉~

 

文章標籤
創作者介紹

亂打一通的心情日記

ephrain 發表在 痞客邦 PIXNET 留言(0) 人氣()