Flash Accelerate

开启FlashPlayer硬件渲染加速

Ekde 2014/11/16. Vidu La ĝisdata versio.

// ==UserScript==
// @name        Flash Accelerate
// @namespace   [email protected]
// @description 开启FlashPlayer硬件渲染加速
// @include     *
// @version     1.00
// @grant       none
// ==/UserScript==

/*
  只保证在firefox下正常运行 
  创意来自 gpu-accelerated-flash-player 扩展
  只有当不存在 wmode 参数时才会把 wmode 设置为 gpu,也就是开启FlashPlayer硬件渲染
  注释不可用 双斜杠,因为 location.assign函数
*/
(function(){

  location.assign("javascript:("+function(){
    var wmodeValue = "gpu";
    var force_direct_gpu = false;/*默认 false,强制 direct 到 gpu,即存在wmode 参数且值为 direct 时也强制开启硬件渲染*/

    var objects = document.querySelectorAll("object");
    var embeds = document.querySelectorAll("embed");

    /*object element*/
    var flag;
    if(objects.length > 0){
      for(var i=0;i<objects.length;i++){
        flag = false;
        for(var ii=0;ii<objects[i].childNodes.length;ii++){
          if(objects[i].childNodes[ii].name == "wmode"){
            flag = true;
            if(force_direct_gpu && objects[i].childNodes[ii].value == "direct"){
              objects[i].childNodes[ii].value = wmodeValue;
            }
            break;
          }
        }
        /*no wmode param*/
        if(flag == false){
          var param = document.createElement("param");
          param.name = "wmode";
          param.value = wmodeValue;
          objects[i].appendChild(param);
        }
      }
    }
    /*embed element*/
    show = function(o){
      setTimeout(function(){embeds[o].style.display="block";},0);
    };
    if(embeds.length > 0){
      for(var i=0;i<embeds.length;i++){
        if(force_direct_gpu && embeds[i].getAttribute("wmode") == "direct"){
            embeds[i].setAttribute("wmode",wmodeValue);
        }
        else if(!embeds[i].getAttribute("wmode")){
            embeds[i].setAttribute("wmode",wmodeValue);
        }
        embeds[i].style.display = "none";
        show(i);
      }
    }
  }+")();void(0);")
})();