30

(画像) を websocket に転送Blobし、反対側のキャンバスにレンダリングします。

createObjectURLブロブで使用すると、次の警告が表示されます。

Resource interpreted as Image but transferred with MIME type text/plain: "blob:https%3A//example.com/demo".

次のコードを使用してオブジェクト URL を作成します。socket.binaryType = "blob";blob は、クライアント側で標準の Websocket 経由で送信されます。

socket.onmessage = function(e) {
  var blob = e.data;
  var url = (window.URL || window.webkitURL).createObjectURL(blob);

  var image = document.createElement('img');
  image.src = url;
}

この警告に対処するために考えられる唯一の方法は、次のコードを使用して BLOB のコピーを作成することですが、すべてのデータをコピーするオーバーヘッドを導入したくありません。

var blob = new Blob([e.data], {
  type: 'image/gif'
});

メソッドは毎秒数十回呼び出されます。

Blobで複製オブジェクトを作成せずにブロブコンテンツタイプを設定する方法についてのアイデアはありnew Blobますか?

4

5 に答える 5

6

まず、「エラー」と言うとき、実際に「警告」を意味するのだろうかと思います。これらは実際には 2 つの異なるものであり、ブラウザーはそれらを異なる方法で扱います (通常、開発者ツールが開いているときにのみ追跡/警告を発生させます)。

したがって、最初に、これが問題でさえあるという前提に異議を唱えます(ブラウザがブロブを「自動入力」するオーバーヘッドと、ブロブを「新規作成」するオーバーヘッドなど)。

しかし、そうは言っても、blob.type プロパティは実際には JavaScript で不変であるため、blob が「新しく」作成されたときに設定する必要があります。あなたの場合、Objective-C ソケットからデータを取得し、次の方法でデイジー チェーン接続しているように聞こえます。

ws.send(fromObjectiveCSocket, {binary: true, mask: true});

Objective-C ソケットからの BLOB データ自体には、送信時にそのタイプの「ヘッダー」タイプのデータが含まれておらず、ノードが BLOB にまったく触れていないように聞こえます (新しい Blob をノードをソケットに送信して、タイピングが保持されているかどうかを確認しますか?)。

何が起こっているのかというと、websocket は取得した BLOB データだけを送信し、受信 JavaScript がそれを取得すると、その場で新しい Blob を使用して暗黙的に入力し、空の型だけを入力します。

したがって、基本的にいいえ、この警告を本当に取り除きたい場合は、新しい Blob 構築を回避する方法はないようです。型を BLOB データに追加してそれをスプライシングするなどのトリックを試したとしても、Websocket 受信コードを暗黙のうちに空の型の BLOB として入力することを回避することはできません。

于 2013-09-30T23:36:06.190 に答える
0

「Blob URL は GET 要求でのみ機能し、要求が正常に行われると、ブラウザーは HTTP 200 OK ステータス コードを送信し、Blob の type プロパティを使用する Content-Type ヘッダーも送信します。」

 var bb = new BlobBuilder();
 var blob = bb.getBlob("x-optional/mime-type-here");

 //send via websocket
 //load via websocket     

私はここで完全にオフですか?

これはすべてhttps://www.inkling.com/read/javascript-definitive-guide-david-flanagan-6th/chapter-22/blobsから取得しました

HTML5 Rocks は、XHR リクエストからの応答で新しい Blob を作成しているようです。だから、結局は悪くないのかもしれません。http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-response

いくつかのアイデアを捨てるだけです。

于 2013-09-29T01:55:46.537 に答える
0

おそらく、送信する前にサーバー側で Content-Type を設定する必要があります

于 2013-09-29T01:28:53.483 に答える