β

简洁、高效、安全、现代化的嵌入和移除flash

前端之路 137 阅读
/** 
 * 嵌入flash
 *
 * @param {HTMLElement}  el  存放flash的Dom元素
 * @param {Object}       opt 参数,注意如果传class(保留关键字)参数需要加引号,例:
 * @example 
    {
     id:'flashDemo', 
     'class':'flashDemo', 
     width:'100%', 
     height:'100%', 
     src: 'flash.swf',
     flashvars:'id=foo&name=bar', 
     ...
    }
 */
function embedSWF(el, opt){
    var url = opt.src + (opt.src.indexOf('?') !== -1 ? '&' : '?') + '__=' + (+new Date()),
        html = '',
        attr = {
            type: 'application/x-shockwave-flash'
        },
        param = {
            wmode: 'transparent',
            allowScriptAccess: 'always'
        },
        obj2attr = function(obj){
            var key, str = '';
            for ( key in obj ) {
                str += ' ' + key + '="' + obj[key] + '"';
            }
            return str;
        };
    (function(arr){
        var i=arr.length, key, obj = {};
        while (i--) {
            obj[ arr[i] ] = 1;
        }
        for (key in opt) {
            if (obj[key]) {
                attr[key] = opt[key];
            } else {
                param[key] = opt[key];
            }
        }
    })('width height id class style type'.split(' '));
    param.src = url;
    
    if (window.ActiveXObject) {
        //对于IE,加上codebase参数才可以在没有安装flash的情况下自动提示安装ActiveX控件
        attr.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0";
        //IE6-8必须同时设置data属性和src参数(或者movie参数)
        attr.data = url;
        
        html += '



/** 
 * 移除flash
 *
 * @param {Node} el 存放flash的Dom元素
 */
function removeSWF(el){
    if (window.ActiveXObject) {
        el.style.display = "none";
        (function(){
            if (el.readyState == 4) {
                //移除相关引用,防止内存泄露
                for (var i in el) {
                    if (typeof el[i] == "function") el[i] = null;
                }
                el.parentNode.removeChild(el);
            } else {
                //正在加载中的flash不能直接移除,延时下重新执行
                setTimeout(arguments.callee, 25);
            }
        })();
    } else {
        el.parentNode.removeChild(el);
    }
}


作者:前端之路
细节往往决定成败,小尽的前端之路。探讨前端优化,浏览器兼容,最新前端技术,最新前端时讯...
原文地址:简洁、高效、安全、现代化的嵌入和移除flash, 感谢原作者分享。

发表评论