javascript - 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。
解决方案
如果您没有 API 来执行此操作,您可以使用它localStorage
来跟踪它。
你可以有两种方法,
addUrlStatus
- 它将一个 url 作为输入并检查它是否在过去被访问过。updateUrlStatus
- 一旦用户使用了 url,就会将 url 的状态设置为true
inlocalStorage
(不确定在您的代码中定义的操作是什么)。
所以你可以做类似的事情,
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);
}
推荐阅读
- php - 移动设备通知
- excel - #value 使用 Google Maps API 密钥计算 excel 距离时出错
- javascript - Angular 4:按钮组件的禁用行为
- python - Python 为字典中的每个条目运行脚本
- azure-functions-core-tools - 如何在 Logic App 中选择一种以上的翻译语言?
- python - ModuleNotFoundError:没有名为“_ctype”的模块
- android - 使用长写入构建器在每次批量写入之间添加延迟
- spring-boot - 在升级到 Spring Boot 2.0 时,得到 UnsatisfiedDependencyException
- actionscript-3 - 如何使滚动窗格中文本字段的自动换行正常工作并且不触发水平滚动
- c - CS50 问题集 1(现金/贪婪算法)出现运行时错误:有符号整数溢出