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);
}

Другие вопросы по тегам