我有一些非常简单的代码贯穿Webpack-> Babel:
let isOn = false;
const videoTag = doc.getElementsByTagName('video')[0];
const trackTag = doc.createElement('track');
const id = someGlobalIHave;
function setMode() {
const tracks = [...videoTag.textTracks].filter(t => t.kind === 'captions');
tracks.forEach(track => {
track.mode = isOn ? 'showing' : 'hidden';
});
}
trackTag.setAttribute('default', '');
trackTag.setAttribute('src', `/mysource/${id}/captions`);
trackTag.setAttribute('kind', `captions`);
videoTag.appendChild(trackTag);
setMode();
我的全局错误处理程序仅向我发送针对Edge 17的错误Function expected
,该行的第6行第8029列的位置非常小。
这几乎等于:
function s(){
[...r.textTracks].filter(e=>"captions"===e.kind)
.forEach(e=>{e.mode=n?"showing":"hidden"})}
我的光标说我在8029,正好在开口弯头和开口方括号之间。
我在这里缺少Edge的什么特质?
更新
在Simo回答后,我在控制台中运行了一些代码
// doc is defined above from document being passed into method
const videoTag = doc.getElementsByTagName('video')[0];
const x = [1];
[...videoTag.textTracks] // just running this line throws Function expected
Array.from(videoTag.textTracks) // works as expected
[...x,2] // returns [1,2]
videoTag.textTracks.filter(t => true); // Object doesn't support property or method 'filter'
答案 0 :(得分:0)
我认为Edge的迭代器协议存在问题,因此也许您可以尝试使用Array.from
之类的东西来代替传播算子。
基本上,您无法在NodeList上迭代或使用传播运算符。
答案 1 :(得分:0)
我上次检查时,IE Edge不支持传播运算符。 您无需在情况下使用传播运算符。数组过滤器已经创建了一个新数组。
const tracks = videoTag.textTracks.filter(t => t.kind === 'captions');
tracks.forEach(track => {
track.mode = isOn ? 'showing' : 'hidden';
});