2017-07-03 45 views
1

對於一個項目,我從多個社交網絡中檢索圖片。我使用Pinterest,我可以列出這些引腳並將其顯示爲URL。但是當我想用XMLHttpRequest下載圖片時,我收到一個CORS錯誤。檢索圖片時Pinterest CORS錯誤

是因爲Pinterest的政策還是有其他方法來做我?

這裏是我的代碼

console.log("Url de l'image: " + this.snURL); 
      //bug avec Pinterest 
      var xhr = new XMLHttpRequest(); 
      var _self = this; 
      xhr.onload = function() { 
       var reader = new FileReader(); 
       reader.onloadend = function() { 
        console.log(reader.result); 
        _self.initRealisationLocalStorage(); 
        workInProgress.Start('Traitement de l\'image'); 
        workInProgress.Info('Traitement de l\'image'); 
        $scope.uploadPhotoNotLocalstorage(reader.result); 
       } 
       reader.readAsDataURL(xhr.response); 
      }; 
      xhr.open('GET', this.snURL); 
      //xhr.setRequestHeader("Access-Control-Allow-Origin","*"); 
      xhr.responseType = 'blob'; 
      xhr.send(); 
}); 

如果有人有一個解決方案或跑的解釋,我會很高興地聽到它

+0

沒有人可以幫忙嗎? – digitalTrilunaire

回答

0

當調用從瀏覽器直接(JavaScript)的存在安全另一個域以防止任意包含外部數據。

當這是允許的,它通常是誰定義CORS頭「訪問控制允許來源」服務器,但我想這是不能接受的Pinterest的每一個域添加調用它們的API。

對於他們推薦使用他們的SDK here,它會使用您配置的重定向URL在Pinterest的應用。作爲後備,否則他們將使用postMessage API

由於這個原因(瀏覽器端的CORS限制),我認爲您不能將JavaScript直接從JavaScript調用到API,請參閱this post

另一種可能性是建立在你身邊的代理後端(如Node.js的項目),這使得查詢到Pinterest的API,然後你在查詢你身邊代理從你的Javascript AJAX 你不會有CORS因爲後端調用會在你身邊,甚至它被部署在不同的域中,你可以自己在後端設置CORS頭。

我覺得SDK方式將解決你問題,它看起來是調用直接從瀏覽器的API時做的唯一途徑。

+0

感謝您的回覆,我從來沒有聽說過postMessage,它可以是有用的。我放棄了Pinterest的目的,因爲它與我的項目不相關,但當我試圖下載圖片表單url時,我遇到了與Google Photo圖片相同的問題。爲了解決這個問題,我用這個php函數使用我的後端:[file_get_contents](http://php.net/manual/en/function.file-get-contents.php)。 – digitalTrilunaire