如何可靠地确定浏览器是否支持DataTransfer()构造函数



我有一个文件上传器,它使用new DataTransfer()为上传的图像生成和显示缩略图。对于Safari用户,不支持此构造函数。棘手的部分是,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);

最新更新