mec*_*ous 15 javascript compatibility internet-explorer
我正在使用该FormData对象,而我的代码在Chrome上运行良好,Microsoft Edge会发出以下错误消息Object doesn't support property or method 'entries'- 这对应于以下代码:
for(let pair of formData.entries()) {
...
}
Run Code Online (Sandbox Code Playgroud)
我试着更换.entries()用.getAll(),但微软边缘不承认任何的两种方法.
有没有办法FormData从Microsoft Edge中获取此功能(迭代文件)?
FormData Microsoft Edge控制台转储
Mon*_*hus 19
如果您使用的是Angular应用程序,请将此行添加到您的polyfills.ts文件中
import 'core-js/es7/object';
Run Code Online (Sandbox Code Playgroud)
它将导入Object上的所有新方法,包括条目
cs_*_*pil 14
从本质上讲,polyfill是一种可以手动定义特定平台/浏览器本身不支持的功能的方法.
在您的情况下,这里Object.entries给出了函数的基本定义:https:
//developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Polyfill
他们提供了这个简单,易于部署的定义:
if (!Object.entries)
Object.entries = function( obj ){
var ownProps = Object.keys( obj ),
i = ownProps.length,
resArray = new Array(i); // preallocate the Array
while (i--)
resArray[i] = [ownProps[i], obj[ownProps[i]]];
return resArray;
};
Run Code Online (Sandbox Code Playgroud)
看看上面的代码,它检查的第一件事是否Object.entries存在.如果确实如此,不用担心,但如果它不存在,那么就创建它......只要在你的代码中实际调用它之前定义了这个函数,你应该没问题.
使用像angular-cli这样的东西,它们提供了一个polyfills.ts文件(在运行应用程序之前执行),您可以在其中放置这样的代码或导入包含您需要的定义的文件.
10/30/2018更新:
@apsillers正确地指出上面的答案不适用FormData.entries(),而是适用Object.entries().
解决方案FormData.entries()(这对我有用):https:
//stackoverflow.com/a/49556416/3806701
基本上,导入这个poly-fill:
<script src="https://unpkg.com/formdata-polyfill"></script>
Run Code Online (Sandbox Code Playgroud)
然后你可以迭代FormData如下:
var formDataEntries = (<any>formData).entries(), formDataEntry = formDataEntries.next(), pair;
while (!formDataEntry.done) {
pair = formDataEntry.value;
console.log(pair[0] + ', ' + pair[1]);
formDataEntry = formDataEntries.next();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12239 次 |
| 最近记录: |