ユーザーが開いているPDFドキュメントを取得してPOST経由で別のサイトに送信するSafari拡張機能を作成しようとしています。SafariプラグインのJavascript - XHRからバイナリファイルのデータをダウンロードしてから再送信する
私はChromeでこの作業を行っていますが、SafariはBlobBuilder
で動作しないため、同じ方法をコピーしても機能しません。
これは、Chromeでどのような作品です:
var xhr = new XMLHttpRequest();
xhr.open("GET", tab.url, true);
xhr.responseType = "arraybuffer";
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var bb = new BlobBuilder();
bb.append(this.response);
var blob = bb.getBlob('application/pdf');
var http = new XMLHttpRequest();
http.open("POST", send_url, true);
var formData = new FormData();
formData.append("src", blob);
http.send(formData);
}
私のPHPスクリプトへとその$ _FILES配列の結果POST会談が私のファイルです。完璧。
しかし、私が試したことは絶対に何もSafariを使用して動作しているようです。私はresponseType='blob'
を試してみましたが、うまくいきませんでした。 Safari JSファイルオブジェクトをこのデータで処理することはできません。私はそれをUint8配列に変更しようとしましたが、これはデータを提出しませんでした。ただの文字列"[object UInt8Array]"
アイデアはありますか?
乾杯!私は素晴らしい結果が「arraybuffer」としてresponseTypeを維持し、新しいUint8Arrayのコンストラクタにxhr.responseを渡しました トニー
バイナリデータをアップロードするには本当にSafariを取得しましたか? 'FormData'オブジェクトに' ArrayBuffer'を追加すると、不正な形式のマルチパートフォームが送信されるので、サーバはファイル内容全体を '------ WebKitFormBoundaryaiKF2ZGx25JiZdKY - 'として報告します。しかしそれは、Safariが静かに何も送っていない他の試みで起こったこと以上のものです。 – Potatoswatter