网页中Flash激活限制的处理方法
程序员文章站
2023-12-12 22:06:52
本文对比了国内门户网站对网页中Flash激活限制的处理方法和技巧。
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为... 08-10-06...
本文对比了国内门户网站对网页中flash激活限制的处理方法和技巧。
今年年初之时,微软发布了一个针对activex控件的补丁,安装此补丁后的ie6中,当activex控件获得焦点时,ie自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的ie7也是同样的处理。
最受影响的想必就是flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。
今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下:
新浪
首先在html的<head>中加载一个脚本:
<script type="text/javascript" src="http://image2.sina.com.cn/home/sinaflash.js"></script>
通过如下脚本在html中写入flash广告:
<script type="text/javascript">
var objflash = new sinaflash("http://ad4.sina.com.cn/200611/17/73696_gundong.swf", "", "279", "56", "7", "", false,"high");
objflash.addparam("wmode", "opaque");
objflash.write("flashcontent_02ae4a");
</script>
下载sinaflash.js来看,其实正是 adobe 建议使用的swfobject。参阅adobe的文章 javascript flash player detection and embedding with swfobject。adobe还提供了一套另外的解决方案,并集成到dreamweaver 中,不过好像用的人不多。
新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是mit license,但版权信息还是不要去掉为好。
搜狐
搜狐的手段和新浪如出一辙,首先加载:
<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>
调用:
var sohuflash2 = new sohuflash("http://images.sohu.com/cs/button/lexus/4501051127.swf", "_bflexo", "450", "105", "7");
sohuflash2.addparam("quality", "high");
sohuflash2.addparam("wmode", "opaque");
sohuflash2.addvariable("clickthru","http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php");
sohuflash2.write("_turnad9");
sohuflash_1.js 同样改写自swfobject,而且改得更面目全非。没必要吧,同学。
你说是搜狐抄的新浪,还是新浪抄的搜狐?
网易
网易就是不一样,处理手段显得很有技术性。首先加载脚本:
<script src="/dartrichmedia_1_03.js"></script>
页面上直接用 docuemnt.write 写入 flash 的html代码。
按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,hack就是那个加载的js中。代码如下:
if(typeof(dclk_isdartrichmedialoaded) == "undefined") {
dclk_isdartrichmedialoaded = true;
function dclkwrite(str){
if(dclk_shouldoverride) {
dclk_original_documentwrite(str);
}
else{
document.write(str);
}
}
function dclkwriteln(str){
if(dclk_shouldoverride) {
dclk_original_documentwriteln(str);
}
else{
document.writeln(str);
}
}
function dclk_isinternetexplorer() {
return (navigator.appversion.indexof("msie") != -1 && navigator.useragent.indexof("opera") < 0);
}
dclk_shouldoverride = dclk_isinternetexplorer();
if(dclk_shouldoverride) {
dclk_original_documentwrite = document.write;
dclk_original_documentwriteln = document.writeln;
document.write = dclkwrite;
document.writeln = dclkwriteln;
}
}
用这么迂回的方式覆盖js默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。
雅虎中国
yahoo!中国对flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。
腾讯
默认flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。
稍做总结吧,新浪/搜狐使用的swfobject实际原理是在外连的js中用innerhtml间接导入flash代码。这和yahoo!中国的处理方式归根揭底都基于微软的说明。
使用 swfobject 还能解决xhtml校验的问题,不过我想门户们都还不会太在意这个:)。
网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式:
//只要在 </body> 后面加上一行
<script src="javascript:'document.body.innerhtml =''';"></script>
真的有效呢! (在我的ie7中无效)
今年年初之时,微软发布了一个针对activex控件的补丁,安装此补丁后的ie6中,当activex控件获得焦点时,ie自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的ie7也是同样的处理。
最受影响的想必就是flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。
今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下:
新浪
首先在html的<head>中加载一个脚本:
<script type="text/javascript" src="http://image2.sina.com.cn/home/sinaflash.js"></script>
通过如下脚本在html中写入flash广告:
<script type="text/javascript">
var objflash = new sinaflash("http://ad4.sina.com.cn/200611/17/73696_gundong.swf", "", "279", "56", "7", "", false,"high");
objflash.addparam("wmode", "opaque");
objflash.write("flashcontent_02ae4a");
</script>
下载sinaflash.js来看,其实正是 adobe 建议使用的swfobject。参阅adobe的文章 javascript flash player detection and embedding with swfobject。adobe还提供了一套另外的解决方案,并集成到dreamweaver 中,不过好像用的人不多。
新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是mit license,但版权信息还是不要去掉为好。
搜狐
搜狐的手段和新浪如出一辙,首先加载:
<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>
调用:
var sohuflash2 = new sohuflash("http://images.sohu.com/cs/button/lexus/4501051127.swf", "_bflexo", "450", "105", "7");
sohuflash2.addparam("quality", "high");
sohuflash2.addparam("wmode", "opaque");
sohuflash2.addvariable("clickthru","http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php");
sohuflash2.write("_turnad9");
sohuflash_1.js 同样改写自swfobject,而且改得更面目全非。没必要吧,同学。
你说是搜狐抄的新浪,还是新浪抄的搜狐?
网易
网易就是不一样,处理手段显得很有技术性。首先加载脚本:
<script src="/dartrichmedia_1_03.js"></script>
页面上直接用 docuemnt.write 写入 flash 的html代码。
按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,hack就是那个加载的js中。代码如下:
if(typeof(dclk_isdartrichmedialoaded) == "undefined") {
dclk_isdartrichmedialoaded = true;
function dclkwrite(str){
if(dclk_shouldoverride) {
dclk_original_documentwrite(str);
}
else{
document.write(str);
}
}
function dclkwriteln(str){
if(dclk_shouldoverride) {
dclk_original_documentwriteln(str);
}
else{
document.writeln(str);
}
}
function dclk_isinternetexplorer() {
return (navigator.appversion.indexof("msie") != -1 && navigator.useragent.indexof("opera") < 0);
}
dclk_shouldoverride = dclk_isinternetexplorer();
if(dclk_shouldoverride) {
dclk_original_documentwrite = document.write;
dclk_original_documentwriteln = document.writeln;
document.write = dclkwrite;
document.writeln = dclkwriteln;
}
}
用这么迂回的方式覆盖js默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。
雅虎中国
yahoo!中国对flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。
腾讯
默认flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。
稍做总结吧,新浪/搜狐使用的swfobject实际原理是在外连的js中用innerhtml间接导入flash代码。这和yahoo!中国的处理方式归根揭底都基于微软的说明。
使用 swfobject 还能解决xhtml校验的问题,不过我想门户们都还不会太在意这个:)。
网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式:
//只要在 </body> 后面加上一行
<script src="javascript:'document.body.innerhtml =''';"></script>
真的有效呢! (在我的ie7中无效)
推荐阅读
-
网页中Flash激活限制的处理方法
-
网页中插入透明Flash的方法和技巧
-
网页中Flash激活限制的处理方法
-
网页中的图片的处理方法与代码_javascript技巧
-
学习动态网页技术PHP中错误处理的一些方法_PHP教程
-
学习动态网页技术PHP中错误处理的一些方法_PHP教程
-
html与嵌入其中的flash均存在滚动条的情况分析及处理方法_HTML/Xhtml_网页制作
-
限制网页只能在微信内置浏览器中打开的实例方法
-
html与嵌入其中的flash均存在滚动条的情况分析及处理方法_HTML/Xhtml_网页制作
-
html文件中flash视频格式(flv、swf)文件的嵌入方法_HTML/Xhtml_网页制作