zoukankan      html  css  js  c++  java
  • flash player往页面注入的脚本表现了adobe的临时工水平

    function __flash__arrayToXML(obj) {
        
    var s = "<array>";
        
    for (var i=0; i<obj.length; i++) {
            s 
    += "<property id=/"" + i + "/">" + __flash__toXML(obj[i]) + "</property>";
        }
        
    return s+"</array>";
    }
    function __flash__argumentsToXML(obj,index) {
        
    var s = "<arguments>";
        
    for (var i=index; i<obj.length; i++) {
            s 
    += __flash__toXML(obj[i]);
        }
        
    return s+"</arguments>";
    }
    function __flash__objectToXML(obj) {
        
    var s = "<object>";
        
    for (var prop in obj) {
            s 
    += "<property id=/"" + prop + "/">" + __flash__toXML(obj[prop]) + "</property>";
        }
        
    return s+"</object>";
    }
    function __flash__escapeXML(s) {
        
    return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
    }
    function __flash__toXML(value) {
       var type = typeof(value);
        if (type == 
    "string") {
            return 
    "<string>" + __flash__escapeXML(value) + "</string>";
        } else if (type == 
    "undefined") {
            return 
    "<undefined/>";
        } else if (type == 
    "number") {
            return 
    "<number>" + value + "</number>";
        } else if (value == null) {
            return 
    "<null/>";
        } else if (type == 
    "boolean") {
            return value ? 
    "<true/>" : "<false/>";
        } else if (value instanceof Date) {
            return 
    "<date>" + value.getTime() + "</date>";
       } else if (value instanceof Array) {
           return __flash__arrayToXML(value);
       } else if (type == 
    "object") {
           return __flash__objectToXML(value);
       } else {
            return 
    "<null/>"; //???
        }
    }
    function __flash__addCallback(instance, name) {
      instance[name] = function () { 
        return eval(instance.CallFunction(
    "<invoke name=/""+name+"/" returntype=/"javascript/">" + __flash__argumentsToXML(arguments,0) + "</invoke>"));
      }
    }
    function __flash__removeCallback(instance, name) {
      instance[name] = null;
    }


    啥都甭说了,看看上面这几个“+=”,已经把啥都说了。刚看到youyee同学定位到一个严重性能瓶颈并表情上面把这段flash往页面里面注入的代码贴出来的时候,emu简直无法相信。
    还好大家都是干这行的,在flash注入完上述脚本后再覆盖(一开始误为重载了,感谢jee等同学的)掉这几个函数并不为难,最多就是为之难受罢了。

  • 相关阅读:
    centos安装nginx
    Vue练习十一:02_05_函数传参改变Div任意属性的值
    Vue练习十:02_04_弹出层
    Vue练习九:02_03_求数组中所有数字的和
    Vue练习八:02_02_点击div显示内容
    Vue练习七:02_01_百度输入法
    Vue练习六:01_06_记住密码提示框
    Vue练习五:01_05_鼠标移入改变样式鼠标移出恢复
    Vue练习四:01_04_点击将DIV变成红色
    Vue练习三:01_03_函数传参
  • 原文地址:https://www.cnblogs.com/stonehuang/p/6603196.html
Copyright © 2011-2022 走看看