刘雷的个人博客

欢迎使用Z-Blog,有问题或意见请到Zblogger.BBS社区反馈,谢谢您的参与使用。

« 中国智能交通网实用的表格隔行换色代码 »

除掉FLASH文件的虚线框

格式
<SCRIPT src="http://www.tianyoo.com/shop/themes/Thought/images/flash.js" type=text/javascript> </SCRIPT>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="690" height="365">
</object>

附js文件源码
===============================
//Check if the browser is InternetExplorer, and if it supports the getElementById DOM method
var ie = (document.defaultCharset && document.getElementById && !window.home);
var opera9 = false;
if (ie){
    //Check for ie 5.5 and exclude it from the script
    var ver=navigator.appVersion.split("MSIE")
    ver=parseFloat(ver[1])
    ie = (ver >=6)
}else if (navigator.userAgent.indexOf("Opera")!=-1) {
    //Check for Opera9 and include it in the ObjectSwap
    var versionindex=navigator.userAgent.indexOf("Opera")+6
    if (parseInt(navigator.userAgent.charAt(versionindex))>=9)
    opera9 = true;
}
//Perform ObjectSwap if the browser is IE or Opera (if not just check flashVersion)
var oswap = (ie || opera9)

//Hide the object to prevent it from loading twice
if (oswap){
    document.write ("<style id='hideObject'> object{display:none;} </style>");
}

/*Replace all flash objects on the page with the same flash object,
by rewriting the outerHTML values
This bypasses the new IE ActiveX object activation issue*/
objectSwap = function(){
    if (!document.getElementsByTagName){
        return;
    }
    //An array of ids for flash detection
    var stripQueue = [];
    //Get a list of all ActiveX objects
    var objects = document.getElementsByTagName('object');
    for (var i=0; i<objects.length; i++){           
        var o = objects[i];   
        var h = o.outerHTML;
        //The outer html omits the param tags, so we must retrieve and insert these separately
        var params = "";
        var hasFlash = true;
        for (var j = 0; j<o.childNodes.length; j++) {
            var p = o.childNodes[j];
            if (p.tagName == "PARAM"){
                //Check for version first - applies to all browsers
                //For this to work, a new param needs to be included in the object with the name "flashVersion" eg:
                //<param name="flashVersion" value="7" />
                if (p.name == "flashVersion"){
                    hasFlash = detectFlash(p.value);
                    if (!hasFlash){
                        //Add the objects id to the list (create a new id if there's isn't one already)
                        o.id = (o.id == "") ? ("stripFlash"+i) : o.id;
                        stripQueue.push(o.id);
                        break;
                    }
                }
                params += p.outerHTML;              
            }
        }   
        if (!hasFlash){
            continue;
        }       
        //Only target internet explorer
        if (!oswap){
            continue;
        }
        //Avoid specified objects, marked with a "noswap" classname
        if (o.className.toLowerCase().indexOf ("noswap") != -1){
            continue;
        }       
        //Get the tag and attributes part of the outer html of the object
        var tag = h.split(">")[0] + ">";           
        //Add up the various bits that comprise the object:
        //The tag with the attributes, the params and it's inner html
        var newObject = tag + params + o.innerHTML + " </OBJECT>";   
        //And rewrite the outer html of the tag
        o.outerHTML = newObject;
    }
    //Strip flash objects
    if (stripQueue.length) {
        stripFlash(stripQueue)
    }
    //Make the objects visible again
    if (oswap){
        document.getElementById("hideObject").disabled = true;
    }
}

detectFlash = function(version){
    if(navigator.plugins && navigator.plugins.length){
        //Non-IE flash detection.
        var plugin = navigator.plugins["Shockwave Flash"];
        if (plugin == undefined){
            return false;
        }
        var ver = navigator.plugins["Shockwave Flash"].description.split(" ")[2];
        return (Number(ver) >= Number(version))
    } else if (ie && typeof (ActiveXObject) == "function"){
    //IE flash detection.
        try{
            var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + version);
            return true;
        }
        catch(e){
            return false;
        }
    }
    //Catchall - skip detection
    return true;
}

//Loop through an array of ids to strip
//Replace the object by a div tag containing the same innerHTML.
//To display an alternative image, message for the user or a link to the flash installation page, place it inside the object tag. 
//For the usual object/embed pairs it needs to be enclosed in comments to hide from gecko based browsers.
stripFlash = function (stripQueue){
    if (!document.createElement){
        return;
    }
    for (var i=0; i<stripQueue.length; i++){
        var o = document.getElementById(stripQueue[i]);
        var newHTML = o.innerHTML;   
        //Strip the comments
        newHTML = newHTML.replace(/<!--\s/g, "");
        newHTML = newHTML.replace(/\s-->/g, "");
        //Neutralise the embed tag
        newHTML = newHTML.replace(/<embed/gi, "<span");       
        //Create a new div element with properties from the object
        var d = document.createElement("div");
        d.innerHTML = newHTML;
        d.className = o.className;
        d.id = o.id;
        //And swap the object with the new div
        o.parentNode.replaceChild(d, o);
    }
}

//Initiate the function without conflicting with the window.onload event of any preceding scripts
var tempFunc = window.onload;
window.onload = function(){
    if (typeof (tempFunc) == "function"){
        try{
            tempFunc();
        } catch(e){}
    }
    objectSwap();
}
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.7 Laputa Build 70216

Copyright 2007.