点评:在HTML代码中嵌入Flash文件一直都是广大web爱好者所所喜欢挑战的事,也算不上什么挑战(对于新手朋友来说吧)好了,闲话不多说,切入正题
关于我的SWFObject V1.5的使用过程,以
上篇中的介绍暂时告一段落了,下面我将会带领SWFObject V2.1出场与大家见面,如果我早一点结识V2.1的话,或许就不会受到“等待HTML DOM加载”问题的侵扰了。
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网首先,给大家简要介绍一下V2.1语法的调用示例:
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript" src="swfobject.js"></script>Qg2HTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript">Qg2HTML5中文学习网 - HTML5先行者学习网
//1、使用Json初始化变量、参数、属性Qg2HTML5中文学习网 - HTML5先行者学习网
var flashvars = {Qg2HTML5中文学习网 - HTML5先行者学习网
name1: "hello",Qg2HTML5中文学习网 - HTML5先行者学习网
name2: "world",Qg2HTML5中文学习网 - HTML5先行者学习网
name3: "foobar"Qg2HTML5中文学习网 - HTML5先行者学习网
};Qg2HTML5中文学习网 - HTML5先行者学习网
var params = {Qg2HTML5中文学习网 - HTML5先行者学习网
menu: "false"Qg2HTML5中文学习网 - HTML5先行者学习网
};Qg2HTML5中文学习网 - HTML5先行者学习网
var attributes = {Qg2HTML5中文学习网 - HTML5先行者学习网
id: "dynamicContent2",Qg2HTML5中文学习网 - HTML5先行者学习网
name: "dynamicContent2"Qg2HTML5中文学习网 - HTML5先行者学习网
};Qg2HTML5中文学习网 - HTML5先行者学习网
swfobject.embedSWF("test6_flashvars.swf", "content2", "300", "120", "6.0.0", "expressInstall.swf", flashvars, params, attributes);Qg2HTML5中文学习网 - HTML5先行者学习网
//2、传统的初始化设置,效果一样Qg2HTML5中文学习网 - HTML5先行者学习网
var flashvars = {};Qg2HTML5中文学习网 - HTML5先行者学习网
flashvars.name1 = "hello";Qg2HTML5中文学习网 - HTML5先行者学习网
flashvars.name2 = "world";Qg2HTML5中文学习网 - HTML5先行者学习网
flashvars.name3 = "foobar";Qg2HTML5中文学习网 - HTML5先行者学习网
var params = {};Qg2HTML5中文学习网 - HTML5先行者学习网
params.menu = "false";Qg2HTML5中文学习网 - HTML5先行者学习网
var attributes = {};Qg2HTML5中文学习网 - HTML5先行者学习网
attributes.id = "dynamicContent3";Qg2HTML5中文学习网 - HTML5先行者学习网
attributes.name = "dynamicContent3";Qg2HTML5中文学习网 - HTML5先行者学习网
swfobject.embedSWF("test6_flashvars.swf", "content3", "300", "120", "6.0.0", Qg2HTML5中文学习网 - HTML5先行者学习网
"expressInstall.swf", flashvars, params, attributes);Qg2HTML5中文学习网 - HTML5先行者学习网
//3、直接写在后面,就一句话,简洁剽悍,不拖泥带水Qg2HTML5中文学习网 - HTML5先行者学习网
swfobject.embedSWF("test6_flashvars.swf", "content5", "300", "120", Qg2HTML5中文学习网 - HTML5先行者学习网
"6.0.0", "expressInstall.swf", {name1:"hello",name2:"world",name3:"foobar"}, {menu:"false"}, {id:"dynamicContent5",name:"dynamicContent5"});Qg2HTML5中文学习网 - HTML5先行者学习网
</script>Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网从我个人来讲,我比较喜欢上面的第三种写法,下面即将提到,我在HTML代码中嵌入Flash文件的最终解决方案中,就是采取的第三种风格调用的swfobject.embedSWF()。V2.1版本的风格非常符合现代JS的风格,代码显得更为简洁。
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网上篇中采取的解决方案看来,似乎已经能够满足大部分需求,而且兼容性似乎也还过得去,理应能够满足绝多数朋友的需求,也未尝不可是一个过得去的解决方案。但是,有一种比较极端的情况被我发现,就是在:
Qg2HTML5中文学习网 - HTML5先行者学习网
new SWFObject("http://www.pec365.com/Flash/20071113.swf", "mymovie", "304", "367", "7", "#FFFFFF"); Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网的时候,如果传入的Flash文件的地址有误,又或者该Flash文件在服务器中被删除掉了,那么你将看到一种最不愿意看到的情况,示例
Qg2HTML5中文学习网 - HTML5先行者学习网如下:
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网
<html>Qg2HTML5中文学习网 - HTML5先行者学习网
<title>DEMO</title>Qg2HTML5中文学习网 - HTML5先行者学习网
<head>Qg2HTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript" src="swfobject_source.js"></script>Qg2HTML5中文学习网 - HTML5先行者学习网
</head>Qg2HTML5中文学习网 - HTML5先行者学习网
<body>Qg2HTML5中文学习网 - HTML5先行者学习网
<form id="Form1">Qg2HTML5中文学习网 - HTML5先行者学习网
<div id="flashcontent">Qg2HTML5中文学习网 - HTML5先行者学习网
<a href="http://www.adobe.com/go/getflashplayer">Qg2HTML5中文学习网 - HTML5先行者学习网
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" border="0" /> Qg2HTML5中文学习网 - HTML5先行者学习网
</a> Qg2HTML5中文学习网 - HTML5先行者学习网
</div>Qg2HTML5中文学习网 - HTML5先行者学习网
</form>Qg2HTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript">Qg2HTML5中文学习网 - HTML5先行者学习网
// 注意,我在Flash文件名前加了一个fQg2HTML5中文学习网 - HTML5先行者学习网
var so = new SWFObject("http://www.pec365.com/Flash/f20071113.swf", "mymovie", "304", "367", "7", "#FFFFFF");Qg2HTML5中文学习网 - HTML5先行者学习网
so.write("flashcontent");Qg2HTML5中文学习网 - HTML5先行者学习网
</script>Qg2HTML5中文学习网 - HTML5先行者学习网
</body>Qg2HTML5中文学习网 - HTML5先行者学习网
</html>Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网建议您亲自执行一下这段代码,如果您是一名新手可参见上篇中说介绍的步骤来运行一下这段代码,真实的感受一下“灾难”的降临。
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网是的,您将看到页面上一片空白,那原本用于替换不能显示Flash时备用的图片也不见了,去了哪里呢?我经过调试后发现,纵使因为传入的Flash文件地址错误,也会创建一个错误的<object [……]></object>标签将<div id="flashcontent">[……]</div>中的内容替换掉,从而就是你看到的,将形成一个高宽分别为304px和367px的空白区域(如果安装了Flash播放器,在屏幕左上角点击鼠标右键,您会有所发现),于是噩梦就如此降临了。
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网为了解决这个噩梦般的结果,于是乎,我就想到一个馊主意,首先检查一下根据传入的Flash文件地址检查一下服务器上是否真的存在该文件,如果返回的结果是该Flash文件存在,那么就执行swfobject.embedSWF()方法,而具体的思路就是利用XMLHttpRequest 对象,通过GET/HEAD方式请求服务器,然后判断xmlHttp.status == 200 || xmlHttp.status == 302作为文件存在的依据,但是这种方式似乎还是存在一定的缺陷,暂时我还没有能力完善,现将我最终的解决方案示例如下:
Qg2HTML5中文学习网 - HTML5先行者学习网Qg2HTML5中文学习网 - HTML5先行者学习网
<html>Qg2HTML5中文学习网 - HTML5先行者学习网
<title>DEMO</title>Qg2HTML5中文学习网 - HTML5先行者学习网
<head>Qg2HTML5中文学习网 - HTML5先行者学习网
<script language="javascript" type="text/javascript" src="JavaScript/swfobject.js"></script>Qg2HTML5中文学习网 - HTML5先行者学习网
<script type="text/javascript">Qg2HTML5中文学习网 - HTML5先行者学习网
(function() {Qg2HTML5中文学习网 - HTML5先行者学习网
var xmlHttp, Qg2HTML5中文学习网 - HTML5先行者学习网
result,Qg2HTML5中文学习网 - HTML5先行者学习网
flashURL = "http://www.pec365.com/Flash/20071113.swf";Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网
var checkFlashURL = function(url) { Qg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp = GetXmlHttpObject();Qg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp.onreadystatechange = function() {Qg2HTML5中文学习网 - HTML5先行者学习网
if ( xmlHttp.readyState == 4 ) {Qg2HTML5中文学习网 - HTML5先行者学习网
if ( xmlHttp.status == 200 || Qg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp.status == 302 ) {Qg2HTML5中文学习网 - HTML5先行者学习网
return (result = true);Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
} Qg2HTML5中文学习网 - HTML5先行者学习网
};Qg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp.open("HEAD", url, true); Qg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp.send(null); Qg2HTML5中文学习网 - HTML5先行者学习网
}; Qg2HTML5中文学习网 - HTML5先行者学习网
var GetXmlHttpObject = function() {Qg2HTML5中文学习网 - HTML5先行者学习网
var xmlHttp = null;Qg2HTML5中文学习网 - HTML5先行者学习网
try {Qg2HTML5中文学习网 - HTML5先行者学习网
// Firefox, Opera 8.0+, SafariQg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp = new XMLHttpRequest();Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
catch (e) {Qg2HTML5中文学习网 - HTML5先行者学习网
// Internet ExplorerQg2HTML5中文学习网 - HTML5先行者学习网
try {Qg2HTML5中文学习网 - HTML5先行者学习网
// Older IEQg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");Qg2HTML5中文学习网 - HTML5先行者学习网
} catch (e) {Qg2HTML5中文学习网 - HTML5先行者学习网
// New IEQg2HTML5中文学习网 - HTML5先行者学习网
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网
return xmlHttp;Qg2HTML5中文学习网 - HTML5先行者学习网
}; Qg2HTML5中文学习网 - HTML5先行者学习网
// 就是用于检查服务器上指定的Flash文件是否存在 Qg2HTML5中文学习网 - HTML5先行者学习网
checkFlashURL(flashURL); Qg2HTML5中文学习网 - HTML5先行者学习网
window.onload = function() {Qg2HTML5中文学习网 - HTML5先行者学习网
if ( result ) {Qg2HTML5中文学习网 - HTML5先行者学习网
swfobject.embedSWF(flashURL, "flashcontent", "304", "367", "10.0.0", "expressInstall.swf", {}, { quality:"autohigh", wmode:"transparent" }, {}); Qg2HTML5中文学习网 - HTML5先行者学习网
} Qg2HTML5中文学习网 - HTML5先行者学习网
else {Qg2HTML5中文学习网 - HTML5先行者学习网
window.alert("您的Flash地址无效,请仔细检查"); // 只是用于调试时检查Flash地址地否正确Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
}Qg2HTML5中文学习网 - HTML5先行者学习网
})();Qg2HTML5中文学习网 - HTML5先行者学习网
</script>Qg2HTML5中文学习网 - HTML5先行者学习网
</head>Qg2HTML5中文学习网 - HTML5先行者学习网
<body>Qg2HTML5中文学习网 - HTML5先行者学习网
<form id="Form1">Qg2HTML5中文学习网 - HTML5先行者学习网
<div id="flashcontent">Qg2HTML5中文学习网 - HTML5先行者学习网
<a href="http://www.adobe.com/go/getflashplayer">Qg2HTML5中文学习网 - HTML5先行者学习网
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" border="0" /> Qg2HTML5中文学习网 - HTML5先行者学习网
</a> Qg2HTML5中文学习网 - HTML5先行者学习网
</div>Qg2HTML5中文学习网 - HTML5先行者学习网
</form>Qg2HTML5中文学习网 - HTML5先行者学习网
</body>Qg2HTML5中文学习网 - HTML5先行者学习网
</html>Qg2HTML5中文学习网 - HTML5先行者学习网
Qg2HTML5中文学习网 - HTML5先行者学习网哇,用了数小时在把这两篇文字折腾好,不小心在公司呆到快22点了,保安来赶人了,想草草收场吧,明天上班得空再来雕琢一下文字,呵呵。