2011-08-23 5 views
5

createObjectURLを使用して、ローカルイメージファイルへの参照URLを取得しています。私がファイル/イメージで完了したら、私はrevokeObjectURLにそのメモリを解放するように呼び出します。すべてがうまく動作しますが、私ができるすべてのメモリを解放していることを確認したいだけです。クライアントサイドファイルのオブジェクトURLとそのメモリを解放する方法について

私はchrome://blob-internalsページを調べた後、私の懸念が生じました。 createObjectURLを呼び出してイメージを使用すると、2つのエントリが作成されていることがわかりました。 URL blob:blobinternal:///d17c4eef-28e7-42bd-bafa-78d5cb86e761

およびその他の

blob:http://localhost/dbfe7b09-81b1-48a4-87cd-d579b96adaf8

両方を持つ一つは、しかし、同じローカルファイルパスに言及しました。 revokeObjectURLを呼び出すと、2番目のエントリだけがchrome://blob-internalsから削除されました。なぜこのようなことが起こるのですか。他のエントリを取り除くにはどうすればいいのですか?また、2つのタイプの違いは何ですか?

また、画像を使用する前にURLを取り消す人々の例も見てきました。これにはどのような影響がありますか?

トピックに関するいくつかの洞察は非常に高く評価されます。 :)

編集: 私はjsfiddleに例を作成しました。最初にblobinternalsを開き、既存のブロブを削除してください。その後、jsfiddleの例を実行し、マシン上のイメージファイルを選択します。それから、追加されたものを見るために境界線を更新する。次に、私の例では「URLを取り消す」をクリックします。最後にblobinternalsをリフレッシュして、どのブロブが残っているかを確認します。

+0

使用しているChromeのバージョンは何ですか?私はこれをChrome 15 Devチャンネルで見ることはできません(1つのblobURLが作成されます)。作成されている2つのURLを返すことができる小さなテストページがありますか?私の経験では、 'revokeObjectURL'呼び出しを反映するのに' chrome:// blob-internals'が数秒かかる場合があります。 – ebidel

+0

投稿を編集してjsfiddleの例を追加しました。私はクロム14ベータを実行しています。 – rewolf

答えて

1

input type="file"要素では、他の参照(blob:blobinternalで始まる参照)が保持されているようです。私は、入力の値をリセットするためにあなたの関数を変更し、私はREVOKEのURL]ボタンをクリックすると、すべての参照はクリアされます:クロームカナリアでテスト

killBut.onclick = function() { 
    URL.revokeObjectURL(ourURL); 
    fileBut.value = ''; 
}; 

+0

これは私にとってもうまくいくようです。良い考えと感謝! 1つの質問:ファイル入力要素はIEでは読み取り専用ではありませんか?もしそうなら、それをどのようにクリアするのですか? – rewolf

+1

これを 'form'要素に入れ、その上で' reset() 'を呼び出すことでクリアします。ここに例があります:http://jsfiddle.net/ag92S/9/ –

+0

良い計画。ありがとう – rewolf

関連する問題