2012-04-05 96 views
2

我最近開始創建一個書籤,該書籤顯示網站上任何圖像的EXIF數據。我選擇使用Nihilogic的binary.js and exif.js庫。對於託管在與父頁面相同的域上的圖像,該腳本非常有效。但是因爲它使用XHR讀取圖像的二進制數據,並且由於XHR僅限於同源請求,所以我無法訪問任何跨站點託管圖像的二進制數據。從JavaScript中讀取EXIF數據(跨域友好)

有沒有辦法在本地(或至少不使用XHR)加載保存EXIF數據的圖像的二進制數據?

我已經學習了一些其他的方向,但我怕我不明白他們不夠好,以確定是否有一個解決方案:

  • JSONP - 我假設有沒有辦法讓二進制數據轉化爲這些東西之一。
  • canvas tags - 這些似乎會產生與PHP不同的base64編碼,我懷疑新編碼中EXIF數據不再存在。

回答

4

由於瀏覽器可以安全地假定那些首先上傳到服務器的人可以安全地使用Javascript,因此可以使用同源圖像和啓用cors的圖像進行特殊操作(如在畫布上)。但後來變得複雜...

我無法訪問任何跨站點託管圖像的二進制數據。

是的,一般來說,你不能這麼做很重要。更重要的是,你不能用小書籤做你想做的事。

因爲這裏的CORS規則很嚴格,(for good reasons!)

總之一般推理是幾乎完全一樣你不能用帆布做這個。瀏覽器處於獨特的安全位置:互聯網上的隨機頁面可以向您顯示對您而言私密的內容,例如假設圖像C:\ MyPhotos \ privateImage1.jpg,假設它可以猜測文件路徑。

但是,該網頁是絕對不允許任何與該文件,而不是顯示給你。它無法讀取二進制信息(EXIF信息或像素信息)。不允許JavaScript知道該圖像看起來像什麼或幾乎任何與其相關的數據。

如果能夠解決這個問題,隨機網頁將能夠嘗試一堆文件路徑,並可能遇到硬盤上的圖像,然後將該圖像的二進制數據上傳到服務器,實際上竊取您的私人圖像。


因爲這個原因,瀏覽器擴展比(JavaScript)小書籤更適合這項任務。

+0

啊哈!我當然知道XHR限制的風險,但我沒有想到當地的照片數據的例子。總而言之,爲什麼圖像也是封閉的。雖然我不能完成小書籤,但有點令人失望。 – 2012-04-06 02:02:36

0

純粹來自客戶端?我對此表示懷疑。如何XHR'ing本地PHP腳本運行類似exif_imagetype()?此功能可以在遠程和圖像上使用。