JavaScript - проверьте, использовался ли URL-адрес объекта
Я могу создать URL-адрес объекта следующим образом:
let pixel = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
let data = atob(pixel);
let buffer = new ArrayBuffer(data.length);
let array = new Uint8Array(buffer);
for (var i = 0;i<data.length;i++){
array[i]=data.charCodeAt(i);
}
let blob = new Blob([buffer], {type: 'image/jpeg'});
let url = URL.createObjectURL(blob);
И я могу отозвать URL-адрес объекта следующим образом:
URL.revokeObjectURL(url);
Но я бы хотел автоматически отозвать URL-адрес после одного использования.
Есть ли способ проверить, был ли получен доступ к URL-адресу объекта?
Заранее спасибо.
РЕДАКТИРОВАТЬ:
В этом случае я не могу просто запускать функцию, когда использую URL-адрес. Вместо этого я хотел бы иметь возможность проверить, использовался ли он даже ВНЕ страницы. Например, если кто-то ввел URL-адрес в адресную строку, это не может вызвать javascript AFAIK.
1 ответ
Если у вас нет API для этого, вы можете использовать это для отслеживания.
У вас может быть 2 метода,
addUrlStatus
- который принимает URL-адрес в качестве входных данных и проверяет, обращались ли к нему в прошлом.updateUrlStatus
- который устанавливает статус URL наtrue
вlocalStorage
после того, как пользователь использовал URL-адрес (не уверен, какое действие определяет это в вашем коде).
Итак, вы могли бы сделать что-то вроде,
let pixel = "iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
let data = atob(pixel);
let buffer = new ArrayBuffer(data.length);
let array = new Uint8Array(buffer);
for (var i = 0;i<data.length;i++){
array[i]=data.charCodeAt(i);
}
let blob = new Blob([buffer], {type: 'image/jpeg'});
let url = URL.createObjectURL(blob);
addUrlStatus(url);
function addUrlStatus(url) {
var _url = localStorage.getItem(url);
if(!_url) {
localStorage.setItem(url, false); // false indicates it hasn't been used yet.
return;
}
}
// this function needs to be called when the user has used the url.
function updateUrlStatus(url) {
localStorage.setItem(url, true);
URL.revokeObjectURL(url);
}