Lightoy's Sky

-=Laugh,and the world laughs with you;weep,and you weep alone.=-
 
 

让flash安静的嵌在网页中

   Web2007-9-12 16:34

在浏览网站时,当你将鼠标移动到FALSH上时,就会出现“单击以激活并使用此控件”的提示,巨恶心。特别当按钮是flash文件时,每次刷新页面都需要先点击激活。后来在网上查找相关解决方法,和大家分享。。。

1,写一个JS文件
命名为:objectSwap.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();
}

2,////////////////////////////在网页中调用

<script type="text/javascript" src="objectSwap.js存放的相对路径"></script>

这样就ok了,感觉这是最简便的一种方法。

标签集:TAGS:flash web 分享
回复Comments()点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}
Name:Lightoy
Location:WuHan,
China


View my complete profile

NewLog

HighLight

NewComment

Link_Friends

 很高兴和大家友情链接!

 

Link_Technology

 GotoAndLearn.com
 Coding In Paradise

Link_Resource

 CCII国际设计中心
 Sagmeister(施德明) ★
 Niklaus Troxler(尼古拉斯)
 86VR | 虚拟无忌
 视觉中国
 设计中国
 动网论坛
 5D多媒体
 工业设计博客

Link_blog

 Jibbering
 Rokey
 JJ.Ying's GUI World
 aw's blog - 活着而已
 胖狗狗的窝
 老蒋的BLOG
 EASTECHO-wind of change
 bbqi的Flash陷阱
 子叶_leaves
 Yellow
 希儿的潘多拉盒子
 DEMO
 Company
 Edit Me

Counter