错误:由于错误800a138f无法完成操作

时间:2018-04-14 10:58:34

标签: javascript internet-explorer blob internet-explorer-11

我在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

1 个答案:

答案 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)
  • 仅限Chrome ,通过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);