問題タブ [revokeobjecturl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
691 参照

html - revokeObjectURL のベスト プラクティスは何ですか。それを呼び出すのは本当に必要ですか?

サイトの高度な画像アップロード機能を作成中です。時間を浪費する前にすべての画像構成を実行し、クライアントとサーバーの両方のリソースが画像をサーバーにアップロードできるようにするために、HTML 5 機能を使用して、すべての画像トリミング後に一括アップロードで完全にクライアント側の機能セットをサポートしようとしています。などの編集が行われています。

ページにドロップ領域があり、複数のファイルをドラッグ/ドロップして、編集する画像を実際に選択できます。ドロップしたら、window.URL.createObjectURLいくつかのフォーム フィールド、簡単なメタデータ抽出プレビューを含むイメージ エディターのリストを ( を使用して) 作成し、Jcrop を各イメージに添付します。私が抱えている問題は、Jcrop を取り付けるときです。への呼び出しで URL を取り消す前にクロッピング機能を添付しているにもかかわらず、window.URL.revokeObjectURLJcrop は手遅れになるまで URL にアクセスしようとしないようで、画像が失われてしまいます。

revokeObjectURL をまったく呼び出さないことに頼りました。これにより、すべてが機能します...ただし、取り消しを行わないことがリソースの使用にどのような影響を与えるかはわかりません。それはメモリリークの可能性を許容しますか? ページを更新すると、取り消されていないオブジェクト URL が解放され、それらのリソースが回収されますか?

0 投票する
1 に答える
3771 参照

javascript - URL がロードされた後にのみ revokeObjectURL を呼び出すにはどうすればよいですか?

私はウェブアプリケーションを持っています。Google Chrome で実行され、他のブラウザーで動作する必要はありません。

サーバーで生成され、AJAX 要求でクライアントに送り返された PDF データがあります。PDF データからブロブを作成します。window.URL.createObjectURL を使用して blob から URL を作成し、それを PDF を表示するために以前に作成したウィンドウ (私の preview_window) に読み込みます。

URL を読み込むために、preview_window.location.href を設定します。

新しい PDF が生成されてウィンドウでプレビューされるたびにリソースが無駄になるのを避けるために、revokeObjectURL を呼び出したいと思います。問題は、preview_window.location.href を設定した直後に呼び出すのが早すぎて、PDF が表示されなくなることです。そのため、URL が読み込まれた後にのみ revokeObjectURL を呼び出したいと思います。この目的で preview_window.onload をコールバックに設定しようとしましたが、呼び出されません。

私が知りたいのですが:

  1. 私がやろうとしているように、ウィンドウが URL をロードしたときにコールバックをトリガーすることは可能ですか? どのように?
  2. revokeObjectURL がタイムリーに呼び出されるようにする別の方法はありますか?

ウィンドウが URL の読み込みを完了したときに revokeObjectURL をトリガーできない場合は、新しい URL を生成する直前に各 URL を取り消すことができます。しかし、可能であれば、読み込みが完了したらすぐに URL を取り消したいと思います。

状況をよく示す html ファイルを用意しました。

上記のデモ コードではそれを回避していますが、アプリケーション用に jQuery をロードしています。

検索でこの質問を見つけましたが、その状況ではメインウィンドウ(「ウィンドウ」)が新しいURLを指しており、ウィンドウがウィンドウから来た場合に違いがあるかどうかをコメントで尋ねると、OPは応答を受け取りませんでした。開いた。