1 FL 教程Flash 網頁中Flash激活限制的處理方法 周四 3月 03, 2011 6:48 am
Admin
Admin
本文對比了國內門戶網站對網頁中Flash激活限制的處理方法和技巧。
今年年初之時,微軟發布了一個針對ActiveX控件的補丁,安裝此補丁后的IE6中,當ActiveX控件獲得焦點時,IE自動為其套上一個虛線矩形邊框,并提示用戶按下回車或者空格鍵以激活控件。剛剛正式發布中文版的IE7也是同樣的處理。
最受影響的想必就是Flash控件了。當時我認為這對廣告滿屏飛的門戶網站來說一定是個壞消息。不過微軟也沒有把事做絕,留了一條腳本方式解決的后路。
今天忽然產生愛好,想看看這些門戶們如何應對此限制的。一番比較下來,給大家匯報一下:
新浪
首先在HTML的中加載一個腳本:
< 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校驗的問題,不過我想門戶們都還不會太在意這個:)。
網易的方式比較邪門,很有駭客色彩。不過還有比它更邪門的方式:
//只要在 后面加上一行
< script src="javascript:'document.body.innerHTML =''';">< /script >
真的有效呢! (在我的IE7中無效)]
今年年初之時,微軟發布了一個針對ActiveX控件的補丁,安裝此補丁后的IE6中,當ActiveX控件獲得焦點時,IE自動為其套上一個虛線矩形邊框,并提示用戶按下回車或者空格鍵以激活控件。剛剛正式發布中文版的IE7也是同樣的處理。
最受影響的想必就是Flash控件了。當時我認為這對廣告滿屏飛的門戶網站來說一定是個壞消息。不過微軟也沒有把事做絕,留了一條腳本方式解決的后路。
今天忽然產生愛好,想看看這些門戶們如何應對此限制的。一番比較下來,給大家匯報一下:
新浪
首先在HTML的中加載一個腳本:
< 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校驗的問題,不過我想門戶們都還不會太在意這個:)。
網易的方式比較邪門,很有駭客色彩。不過還有比它更邪門的方式:
//只要在 后面加上一行
< script src="javascript:'document.body.innerHTML =''';">< /script >
真的有效呢! (在我的IE7中無效)]