我在IE 11中遇到以下错误 -
错误:由于错误800a138f无法完成操作。
代码如下 -
File = function(k, j, i) {
var e = new Blob(k, i);
e.name = j;
e.lastModifiedDate = new Date();
return e;
}
不确定出了什么问题。我在控制台中没有看到任何其他错误。只是一些后续错误说无法找到null属性(因为上面的文件为null)。
上述代码有什么问题。使用chrome和firefox可以正常工作吗?
编辑: 整个逻辑是 -
try {
new File([], "")
} catch (g) {
console.log(g);
File = function(k, j, i) {
var e = new Blob(k, i);
e.name = j;
e.lastModifiedDate = new Date();
return e;
}
}
我添加了日志以查看它为什么会捕获,我看到以下 -
TypeError: Object doesn't support this action
答案 0 :(得分:0)
即使我手边没有IE来测试它,我也会说这是因为window.File
确实存在于此浏览器上,并且您无法覆盖此属性。
实际上,即使您无法在此浏览器中从脚本中调用File构造函数,也存在File构造函数,因此例如input[type='file']
中的内容是File
的实例
console.log(typeof window.File === "function" && 'File already exists');
inp.onchange = function() {
if(inp.files[0] instanceof File) {
console.log("yep, that's a File");
}
};
<input type="file" id="inp">
嗯,这取决于你想要用这个文件做什么。
目前,此类对象的用例数量非常有限:
filename
设置为FormData.append('fieldName', blob, filename)
,DataTransfer.items.add()
方法将文件附加到FileList。使用此文件可以完成的其他任何事情都将使用Blob完成相同的操作,无论如何,您的fakeFile都无法访问这两种方法。
但是如果你真的想这样做,那么我想只需为你的功能选择一个其他名称就会让IE感到高兴:
// Beware, untested code below
(function() {
var blob = new Blob(['foo'], {
type: 'text/plain'
}),
file;
try {
file = new File([blob], 'foo.txt');
if (file.name !== 'foo.txt' || !file.lastModifiedDate || !file.type === 'text/plain') {
throw new Error('invalid');
}
window.MyFile = File;
} catch (e) {
window.MyFile = function(k, j, i) {
var e = new Blob(k, i);
e.name = j;
e.lastModifiedDate = new Date();
return e;
};
}
})();
var file = new MyFile([new Blob(['bar'], {
type: 'text/plain'
})], 'mytext.txt');
console.log(file);