边说边在Babel'ed代码上需要功能

时间:2019-07-19 19:03:51

标签: javascript webpack babeljs microsoft-edge

我有一些非常简单的代码贯穿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'

2 个答案:

答案 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';
  });