如何可靠地确定浏览器是否支持 DataTransfer() 构造函数?
How can I reliably determine if a browser supports the DataTransfer() constructor?
我有一个文件上传器,它使用 new DataTransfer()
为上传的图像生成和显示缩略图。对于 Safari 用户,此构造函数为 not supported。棘手的部分是 DataTransfer
作为一个特性 是 支持的——特别是构造函数不受支持。
如何检测此功能是否存在,以便我可以为 Safari 用户提供标准 file
输入?澄清一下,我不是在寻求后备方面的帮助 - 只是功能检测本身。
我尝试了以下方法但无济于事:
const isConstructor = (func) => (func && typeof func === "function" && func.prototype && func.prototype.constructor) === func;
isConstructor(DataTransfer); //true in Safari
我能够解决这个问题,但以一种我不太满意的有点老套的方式。我仍然会接受我能得到的更好的答案。
let dataTransferConstructorSupported = false;
try { new DataTransfer(), dataTransferConstructorSupported = true } catch {}
console.log(dataTransferConstructorSupported);
我有一个文件上传器,它使用 new DataTransfer()
为上传的图像生成和显示缩略图。对于 Safari 用户,此构造函数为 not supported。棘手的部分是 DataTransfer
作为一个特性 是 支持的——特别是构造函数不受支持。
如何检测此功能是否存在,以便我可以为 Safari 用户提供标准 file
输入?澄清一下,我不是在寻求后备方面的帮助 - 只是功能检测本身。
我尝试了以下方法但无济于事:
const isConstructor = (func) => (func && typeof func === "function" && func.prototype && func.prototype.constructor) === func;
isConstructor(DataTransfer); //true in Safari
我能够解决这个问题,但以一种我不太满意的有点老套的方式。我仍然会接受我能得到的更好的答案。
let dataTransferConstructorSupported = false;
try { new DataTransfer(), dataTransferConstructorSupported = true } catch {}
console.log(dataTransferConstructorSupported);