IE11 对象不支持 属性 或方法 'Symbol(Symbol.iterator)_a.2p3bca3ct9h
IE11 Object doesn't support property or method 'Symbol(Symbol.iterator)_a.2p3bca3ct9h
我正在使用Angular 8, tslint 5.15 & typescript v3
我正在使用以下代码 ArryaBuffer
读取文件
const reader = new FileReader();
reader.readAsArrayBuffer(<FileObject>);
reader.onload = () => {
this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);
}
现在,当我将此 uploadedData
传递给 API 时,我正在使用以下函数将其转换为 byteArray。
convertLicenseToByteArray(uploadedData) {
const bytesArray = [];
for (const i of uploadedData) {
bytesArray.push(i);
}
return bytesArray;
}
以上代码在ie11中报错,
ERROR TypeError: Object doesn't support property or method
'Symbol(Symbol.iterator)_a.srxqdvyfxlx'
我尝试在网上搜索,发现我可能需要添加 babel-polyfill
但它对我不起作用。
有什么帮助吗?
IE11 几乎不支持任何 ES2015+,所以这意味着没有箭头函数、没有 Symbol、没有迭代器和迭代器。 (IE9-IE11 确实支持 const
和 let
,但不正确。它们支持未标准化的早期版本。最大的差异在于 for
循环。)
如果您想 运行 在 IE11 上使用该代码,您需要将其转换为 ES5 并添加一些 polyfill。符号和可迭代性无法正确填充,但是 Babel and others provide something partially functional. I see here that Babel now recommends not using their own @babel/polyfill
and instead using core-js
directly (and regenerator runtime 如果您需要转换生成器函数)。
将“core-js
”添加到您的 package.json 并将导入添加到您的 polyfills.ts
import 'core-js/es6/symbol';
问题与uploadedData参数有关,当我们调用convertLicenseToByteArray方法并使用uploadedData变量时,如果数据未填充或未定义,则会显示此错误。
您可以尝试在 reader onload 函数中调用 convertLicenseToByteArray 方法。
const reader = new FileReader();
reader.onload = (_event) => {
this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);
console.log(this.convertLicenseToByteArray(this.uploadedData).length);
}
对于可能在没有打字稿的 Aurelia 项目中遇到此问题的任何人,我能够通过安装 core-js 来解决它,其中包含使这项工作所需的 polyfill。
npm install --save core-js@3.6.5
然后我在遇到问题的 .js 文件中添加了导入,它开始工作了。
import "core-js"
我正在使用Angular 8, tslint 5.15 & typescript v3
我正在使用以下代码 ArryaBuffer
读取文件
const reader = new FileReader();
reader.readAsArrayBuffer(<FileObject>);
reader.onload = () => {
this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);
}
现在,当我将此 uploadedData
传递给 API 时,我正在使用以下函数将其转换为 byteArray。
convertLicenseToByteArray(uploadedData) {
const bytesArray = [];
for (const i of uploadedData) {
bytesArray.push(i);
}
return bytesArray;
}
以上代码在ie11中报错,
ERROR TypeError: Object doesn't support property or method 'Symbol(Symbol.iterator)_a.srxqdvyfxlx'
我尝试在网上搜索,发现我可能需要添加 babel-polyfill
但它对我不起作用。
有什么帮助吗?
IE11 几乎不支持任何 ES2015+,所以这意味着没有箭头函数、没有 Symbol、没有迭代器和迭代器。 (IE9-IE11 确实支持 const
和 let
,但不正确。它们支持未标准化的早期版本。最大的差异在于 for
循环。)
如果您想 运行 在 IE11 上使用该代码,您需要将其转换为 ES5 并添加一些 polyfill。符号和可迭代性无法正确填充,但是 Babel and others provide something partially functional. I see here that Babel now recommends not using their own @babel/polyfill
and instead using core-js
directly (and regenerator runtime 如果您需要转换生成器函数)。
将“core-js
”添加到您的 package.json 并将导入添加到您的 polyfills.ts
import 'core-js/es6/symbol';
问题与uploadedData参数有关,当我们调用convertLicenseToByteArray方法并使用uploadedData变量时,如果数据未填充或未定义,则会显示此错误。
您可以尝试在 reader onload 函数中调用 convertLicenseToByteArray 方法。
const reader = new FileReader();
reader.onload = (_event) => {
this.uploadedData= new Uint8Array(reader.result as ArrayBuffer);
console.log(this.convertLicenseToByteArray(this.uploadedData).length);
}
对于可能在没有打字稿的 Aurelia 项目中遇到此问题的任何人,我能够通过安装 core-js 来解决它,其中包含使这项工作所需的 polyfill。
npm install --save core-js@3.6.5
然后我在遇到问题的 .js 文件中添加了导入,它开始工作了。
import "core-js"