【问题标题】:Error: Could not complete the operation due to error 800a138f错误:由于错误 800a138f 无法完成操作
【发布时间】:2018-09-24 14:53:45
【问题描述】:

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

【问题讨论】:

  • 该代码对我来说没有错误 - 但是,在没有第三个参数的情况下调用时它确实......你是如何调用该函数的(注意:你正在覆盖本机File 对象,这是你的意图吗?)
  • @JaromandaX 用我看到的更多代码和异常更新了问题。请检查。谢谢。
  • 正如我的评论所说,如果您不提供第三个参数(在 Blob 构造函数中使用),IE11 将失败 - 建议 application/octet-stream
  • @JaromandaX 如果您能提供一些关于 Blob 接受的参数的更多信息,那就太好了。我对此很陌生。谢谢。
  • 我在文档中找不到任何说明第二个参数在 IE11 中是强制性的 - 我所能做的就是从证据中推断出它是

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


【解决方案1】:

虽然我手头没有 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2012-04-28
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多