Enhancement(機能追加・改善) #3201
完了activity/post.json の画像投稿機能をJavaScriptから非同期に呼び出せるようにするための修正
0%
説明
Overview (概要)¶
JSON API の activity/post.json で画像を含むアクティビティの投稿を行う場合、XHR ではファイルのアップロードを行うことが出来ないため iframe 要素を動的に作成してそこで API を呼ぶ必要がある (e.g. jQuery.upload )。
この方法で API を呼び出す場合はレスポンスの Content-Type が application/json
となっていると、iframe 読み込み時にブラウザによるダウンロードダイアログが表示されたり、iframe 要素から取得できる contentWindow.document (または contentDocument) の内容に(ブラウザの拡張機能等によって整形された)HTMLタグが混入したりすることがあるため不都合となる。
このため、activity/post.json (及び、今後追加される画像アップロード機能を含んだAPI) については強制的に Content-Type を text/html
にするオプションが必要である。
Spec (仕様)¶
forceHtml
パラメータを追加、forceHtml=1 の場合は Content-Type を text/html
にする(レスポンス本文はそのまま)
Youichi Kimura さんが約12年前に更新
- ステータス を New(新規) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
更新履歴 4a8aa98144c10dfca183e1a6293ee7f7849b0621 で適用されました。
Youichi Kimura さんが7年以上前に更新
- ステータス を Rejected(差し戻し) から Won't fix(対応せず) に変更
- 進捗率 を 50 から 0 に変更
言い出した当人ではありますが、レスポンスボディに JSON を出力する API で Content-Type: text/html
を使用することは XSS を招く恐れがあるため、このような修正はすべきでないと考えます。
このチケットを作成した当時とはモダンブラウザにおける XHR の対応状況が変わっており、現在では FormData を使用した multipart/form-data のアップロードを用いることで解決が可能です。そのため、iframe を使用したアップロードを行う必要はありません。
http://caniuse.com/#feat=xhr2
XHR2 に対応していないブラウザで問題になるであろう IE9 は、2017/4/11 の Windows Vista サポート終了とともに OpenPNE におけるサポート対象から外れるため、今後はファイルアップロードを伴う API リクエストにおいても XHR が使用されることになるはずです。