2012-04-05 12 views
2

最近、ウェブサイト上の任意の画像のEXIFデータを表示するブックマークレットの作成を開始しました。私はNihilogicのbinary.js and exif.jsライブラリを使うことにしました。親ページと同じドメインにホストされている画像の場合、スクリプトはすばらしく機能します。しかし、それはXHRを使ってイメージのバイナリデータを読み込むため、XHRは同じオリジンリクエストに制限されているため、サイト間でホストされているイメージのバイナリデータにアクセスすることはできません。JavaScriptでimgからEXIFデータを読む(クロスドメイン対応)

イメージのバイナリデータをEXIFデータを保存するローカルに(または少なくともXHRを使用せずに)ロードする方法はありますか?

私はいくつかの他の方向を探ってきましたが、私は彼らに解決策があるかどうかを決定するために十分に理解していない恐れ:

  • JSONPは - 私はバイナリを取得する方法はありませんと仮定していますこれらの事柄の1つにデータを変換します。
  • canvas tags - これは、PHPとはまったく異なるbase64エンコーディングを生成しているようで、EXIFデータは新しいエンコーディングには存在しないと思われます。

答えて

4

Javascriptは、キャンバス上のような、キャンバス上のように、同じ原点の画像とcors対応の画像を使用することが許可されています。ブラウザは、最初にサーバにアップロードすることがOKであると安全に仮定できるからです。しかし、それは複雑になる...

私はクロスサイトホスティングイメージのバイナリデータにアクセスできません。

はい、一般的に、あなたはできないことが非常に重要です。さらに重要な点は、ブックマークレットではできないことです。

ここCORS規則は一言で言えば、一般的に推論はかなり正確に同じである

(for good reasons!)厳しいですので、あなたはキャンバスでこれを行うことはできません。ブラウザーはユニークなセキュリティ上の位置にあります。インターネット上のランダムなページは、仮想パスの画像C:\ MyPhotos \ privateImage1.jpgのように、あなたが自分のプライベートなものを表示することができます。

しかし、そのWebページは、あなたにそれ以外のものを表示する以外は、にすることはできません。バイナリ情報(EXIF情報またはピクセル情報)を読み取ることはできません。 JavaScriptは、その画像がどのように見えるか、またはのいずれかの画像が関連付けられていることを知ることはできません。

もしそれが分かっていれば、ランダムなウェブページがたくさんのファイルパスを試して、ハードドライブのイメージを見つけて、そのイメージのバイナリデータをサーバーにアップロードすることができます。実際にあなたの私的なイメージを盗みます。


ブラウザの拡張機能は、(JavaScript)ブックマークレットよりもはるかにこのタスクに適しています。

+0

Aha!私は確かにXHRの制限のリスクを知っていますが、私は地元の写真のデータの例は考えていませんでした。なぜ画像がボックスに閉じ込められるのかを完全に理解している。しかし、私がブックレットレットであったものを達成することができないことは少し残念です。 –

0

純粋にクライアントからですか?疑わしい。 exif_imagetype()のようなものを実行するローカルPHPスクリプトをXHRするのはどうでしょうか?この機能は、画像だけでなく、リモートでも機能します。

関連する問題