關於Microsoft edge 無效果的問題

About: vipVideos_skipAd [Preview]
我自己透過F12 debugger去抓錯誤,發現是在這段發生錯誤
約在第324行
for (let k of doc.querySelectorAll('object,embed')) {

Edge是支援document.querySelectorAll()語法,但抓出來的object NodeList卻不支援forEach或作者您寫的for(let..of)
會出現Object doesn't support property or method 'Symbol.iterator' 的錯誤。
以下是其他人向微軟的反饋
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10638731/
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/5998615/

目前看起來可行的做法就是用一般的for迴圈來替代
我修改如下
new MutationObserver(function () {
let k=doc.querySelectorAll('object,embed');
for(var i=0;i<k.length;i++){
isEmbed = k[i].matches('embed');
if (isEmbed && k[i].parentNode.matches('object'))
continue;
swfAddr = isEmbed ? k[i].src : k[i].data || k[i].children.movie.value;
let p = k[i].parentNode;
if (parents.has(p) || !/\.swf(?:$|\?)/.test(swfAddr))
continue;
parents.add(p);
if (isPlayer(k[i])) {
console.log(k[i], swfAddr, ' is player!');
doPlayer(k[i]);
}
}
/*for (let k of doc.querySelectorAll('object,embed')) {
isEmbed = k.matches('embed');
if (isEmbed && k.parentNode.matches('object'))
continue;
swfAddr = isEmbed ? k.src : k.data || k.children.movie.value;
let p = k.parentNode;
if (parents.has(p) || !/\.swf(?:$|\?)/.test(swfAddr))
continue;
parents.add(p);
if (isPlayer(k)) {
console.log(k, swfAddr, ' is player!');
doPlayer(k);
}
}*/
}).observe(bd, {
childList : true,
subtree : true
});

這樣修改後還有一段要改,約在第280的function getFlashvars(p) 中,Edge 目前不支援直接透過name去取的child,我修改如下
function getFlashvars(p) {
let s = 'flashvars';
if (isEmbed)
return p.getAttribute(s);
if(!p.querySelectorAll('[name='+s+']'))
s = 'flashVars';
return p.querySelectorAll('[name='+s+']')[0].value;
}

目前我這樣修正後,在YouKu測試成功,可以跳過廣告和切換1080p
Prihlásiť saaleboRegistrovať pre komentovanie.