之前开启硬解一直有CPU占用高,或者无法启用的问题,有的即使启用了但在全屏切换时会有卡顿,偶尔看到一个GM脚本叫“Force Flash Wmode”,把Flash的参数Wmode设置为gpu或者direct可以强制开启硬解。使用之后果然上述出现的问题不见了。
GM脚本地址:
https://greasyfork.org/en/scripts/5433-force-flash-wmode
不过这个脚本有两个问题,一是只对object对象处理,但有些flash用的是embed;二是只处理找到的第一个object,如果有多个就无法处理。
下面是针对上面两个问题修改后的代码:
var wmode = "gpu"; //direct or gpu
var targetNode=document.body;
var matchObject="object[type='application/x-shockwave-flash']";
var matchEmbed="embed[type='application/x-shockwave-flash']";
var onMatch=function(node){
var objs = document.querySelectorAll(matchObject);
var embs = document.querySelectorAll(matchEmbed);
if (objs) {
for (i = 0; i < objs.length; i++) {
var wmodeParam=objs[i].querySelector("param[name='wmode']");
if(wmodeParam){
wmodeParam.value= wmode;
} else {
var param = document.createElement("param");
param.setAttribute("name", "wmode");
param.setAttribute("value", wmode);
objs[i].appendChild(param);
}
}
}
if (embs) {
for (i = 0; i < embs.length; i++) {
embs[i].setAttribute("wmode", wmode);
}
}
return true;
};
var MutationObserver=window.MutationObserver;
var observer = new MutationObserver(function(mutations) {
mutations.some(function(mutation){
var addedNodes=Array.from(mutation.addedNodes||[]);
return addedNodes.some(function(node){
if(node.nodeType!==Node.ELEMENT_NODE)return;
if(!node.mozMatchesSelector(matchObject) && !node.mozMatchesSelector(matchEmbed))return;
return onMatch(node);
});
});
});
var options={childList: true, subtree: true};
observer.observe(targetNode, options);
没有评论:
发表评论