因为现在Flash的显示方式和以前不同了,将鼠标放到FLASH等控件上面就会有一个虚线框,提示说“单击以激活并使用此控件”。也就是说页面刚打开的时候,页面上的Flash是没有被激活的,需要用户点击确认,这时Flash可以正常播放,但如果里面有交互性内容(比如:按钮)就不能直接点击,鼠标点击激活后交互性内容才可以使用。原因是你的系统在最近升级更新过了,并且安装了更新系统编号为KB912945的补丁。
这是微软为了避免与Eolas公司和加利福尼亚大学之间的专利侵权纠纷,而发布的一个IE非安全更新,这不是什么BUG 。
安装这个补丁以后,IE浏览器对ActiveX控件和Java程序的处理方式将有所改变,默认情况下不会主动激活,因此用户在访问Flash广告等网络内容时需要多点击一次鼠标,但非交互式控件不会改变,微软已经通知网站开发人员最好对他们的网页作出相应修改!
客户端的解决办法:在控制面板的"添加删除程序"中删除编号为"KB912945"的更新,如果列表中没有显示,需要在"添加删除程序"窗口右上角的“显示更新”前打√。
网站开发人员的应对办法:
一、下载后将压缩包内的“FLASH.js”文件放入站点任意文件夹中
二、在网页<head></head>之间插入以下代码
<!--修正FLASH正确显示代码开始-->
<script language="javascript" type="text/javascript" src="flash.js的相对路径"></script>
<!--修正FLASH正确显示代码结束-->
三、用下面java语句完全替换网页中“<object> ……〈/object>"(包括首尾标记)
<script language="javascript" type="text/javascript">
writeflashhtml("_swf=你的FLASH文件地址", "_width=你的FLASH文件宽度", "_height=你的FLASH文件高度" ,"_wmode=transparent");
</script>
Flash.js
function writeflashhtml( arg )
... {
var parm = []
var _default_version = "8,0,24,0";
var _default_quality = "high";
var _default_align = "middle";
var _default_menu = "false";
for(i = 0; i < arguments.length; i ++)
...{
parm[i] = arguments[i].split(' ').join('').split('=')
for (var j = parm[i].length-1; j > 1; j --)...{
parm[i][j-1]+="="+parm[i].pop();
}
switch (parm[i][0])
...{
case '_version' : var _version = parm[i][1] ; break ;
case '_swf' : var _swf = parm[i][1] ; break ;
case '_base' : var _base = parm[i][1] ; break ;
case '_quality' : var _quality = parm[i][1] ; break ;
case '_loop' : var _loop = parm[i][1] ; break ;
case '_bgcolor' : var _bgcolor = parm[i][1] ; break ;
case '_wmode' : var _wmode = parm[i][1] ; break ;
case '_play' : var _play = parm[i][1] ; break ;
case '_menu' : var _menu = parm[i][1] ; break ;
case '_scale' : var _scale = parm[i][1] ; break ;
case '_salign' : var _salign = parm[i][1] ; break ;
case '_height' : var _height = parm[i][1] ; break ;
case '_width' : var _width = parm[i][1] ; break ;
case '_hspace' : var _hspace = parm[i][1] ; break ;
case '_vspace' : var _vspace = parm[i][1] ; break ;
case '_align' : var _align = parm[i][1] ; break ;
case '_class' : var _class = parm[i][1] ; break ;
case '_id' : var _id = parm[i][1] ; break ;
case '_name' : var _name = parm[i][1] ; break ;
case '_style' : var _style = parm[i][1] ; break ;
case '_declare' : var _declare = parm[i][1] ; break ;
case '_flashvars' : var _flashvars = parm[i][1] ; break ;
default :;
}
}
var thtml = ""
thtml += "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=" + ((_version)?_version:_default_version) + "'"
if(_width) thtml += " width='" + _width + "'"
if(_height) thtml += " height='" + _height + "'"
if(_hspace) thtml += " hspace='" + _hspace + "'"
if(_vspace) thtml += " vspace='" + _vspace + "'"
if(_align) thtml += " align='" + _align + "'"
else thtml += " align='" + _default_align + "'"
if(_class) thtml += " class='" + _class + "'"
if(_id) thtml += " id='" + _id + "'"
if(_name) thtml += " name='" + _name + "'"
if(_style) thtml += " style='" + _style + "'"
if(_declare) thtml += " " + _declare
thtml += ">"
if(_swf) thtml += "<param name='movie' value='" + _swf + "'>"
if(_quality) thtml += "<param name='quality' value='" + _quality + "'>"
else thtml += "<param name='quality' value ='" + _default_quality + "'>"
if(_loop) thtml += "<param name='loop' value='" + _loop + "'>"
if(_bgcolor) thtml += "<param name='bgcolor' value='" + _bgcolor + "'>"
if(_play) thtml += "<param name='play' value='" + _play + "'>"
if(_menu) thtml += "<param name='menu' value='" + _menu + "'>"
else thtml += "<param name='menu' value='" + _default_menu + "'>"
if(_scale) thtml += "<param name='scale' value='" + _scale + "'>"
if(_salign) thtml += "<param name='salign' value='" + _salign + "'>"
if(_wmode) thtml += "<param name='wmode' value='" + _wmode + "'>"
if(_base) thtml += "<param name='base' value='" + _base + "'>"
if(_flashvars) thtml += "<param name='flashvars' value='" + _flashvars + "'>"
thtml += "<embed pluginspage='http://www.macromedia.com/go/getflashplayer'"
if(_width) thtml += " width='" + _width + "'"
if(_height) thtml += " height='" + _height + "'"
if(_hspace) thtml += " hspace='" + _hspace + "'"
if(_vspace) thtml += " vspace='" + _vspace + "'"
if(_align) thtml += " align='" + _align + "'"
else thtml += " align='" + _default_align + "'"
if(_class) thtml += " class='" + _class + "'"
if(_id) thtml += " id='" + _id + "'"
if(_name) thtml += " name='" + _name + "'"
if(_style) thtml += " style='" + _style + "'"
thtml += " type='application/x-shockwave-flash'"
if(_declare) thtml += " " + _declare
if(_swf) thtml += " src='" + _swf + "'"
if(_quality) thtml += " quality='" + _quality + "'"
else thtml += " quality='" + _default_quality + "'"
if(_loop) thtml += " loop='" + _loop + "'"
if(_bgcolor) thtml += " bgcolor='" + _bgcolor + "'"
if(_play) thtml += " play='" + _play + "'"
if(_menu) thtml += " menu='" + _menu + "'"
else thtml += " menu='" + _default_menu + "'"
if(_scale) thtml += " scale='" + _scale + "'"
if(_salign) thtml += " salign='" + _salign + "'"
if(_wmode) thtml += " wmode='" + _wmode + "'"
if(_base) thtml += " base='" + _base + "'"
if(_flashvars) thtml += " flashvars='" + _flashvars + "'"
thtml += "></embed>"
thtml += "</object>"
document.write(thtml)
}
// 代码结束
第二种激活方法(如果有与FLASH交互,推荐第一种方法)
将JS文件引入网页
<script language="javascript" type="text/javascript" src="Js/objectSwap.js"></script>
objectSwap.js
<param name="flashVersion" value="8" /> to the object tag.
自动激活FLASH
*/
// 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();
}