JavaScript URL.revokeObjectURL() — звільнити пам'ять від тимчасової адреси
Статичний метод URL.revokeObjectURL() звільняє пам'ять, зайняту адресою з createObjectURL().
Загальний опис
Браузер не може здогадатись, коли адреса стала непотрібною, — тож тримає файл у пам'яті, доки ти не скажеш прямо.
Але є тонкість із моментом виклику. Відкликати адресу одразу після присвоєння в src — надто рано: браузер ще не встиг завантажити зображення, і воно не покажеться. Правильно — в обробнику onload, коли картинка вже намальована.
Для завантаження файлу (<a download>) відкликати можна одразу після click() — браузер уже взяв дані.
- Порада
-
Для зображень клич його в
автор: NagarDonload, для завантажень — одразу післяclick(). Занадто ранній виклик тихо ламає обидва сценарії.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| revokeObjectURL | 8+ | 4+ | 6+ | 15+ | 12+ | 10+ |
| Переглядач | ||||
|---|---|---|---|---|
| revokeObjectURL | 4.4+ | yes | yes | 6+ |
Приклади
+ запропонувати свій приклад у пісочниці
Правильний момент виклику — інакше нічого не покажеться.
HTML
<img id="preview" width="120" alt="Прев'ю">
JS
// Blob створюємо прямо тут — у житті це файл користувача
const svg = '<svg xmlns="http://www.w3.org/2000/svg" width="120" height="60"><rect width="120" height="60" fill="#0172ad"/></svg>';
const blob = new Blob([svg], { type: 'image/svg+xml' });
const img = document.getElementById('preview');
const url = URL.createObjectURL(blob);
img.src = url;
img.onload = () => {
// звільняємо ЛИШЕ після завантаження
URL.revokeObjectURL(url);
console.log('Показано і звільнено');
};
// зарано звільниш — картинка може не встигнути показатись
Коментарі
Коментарів ще немає — будьте першим!