找回密码
 入住遨海湾
搜索
网站解决方案专享优惠-3折上云
查看: 2016|回复: 4

对比国内门户网站对Flash激活限制的处理

[复制链接]
发表于 2008-1-8 22:14:00 | 显示全部楼层 |阅读模式

登录后查才能浏览下载更多咨询,有问题联系QQ:3283999

您需要 登录 才可以下载或查看,没有账号?入住遨海湾

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。 " D* G- y: y8 t8 `8 q4 M7 u9 J 3 G1 Q# e" @) P2 h; W/ r最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。0 P8 p: h+ }: [- P. M q# T ; h9 D8 `8 q) K* e5 q 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: 3 m0 d0 f# S* b- a [4 c- `' W! y; u p8 t; p 新浪 (www.sina.com.cn) 7 V) t% _ W6 k9 D/ K/ E% o首先在HTML的<head>中加载一个脚本:
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;http://image2.sina.com.cn/home/sinaflash.js&quot;&gt;&lt;/script&gt;
复制代码
通过如下脚本在HTML中写入Flash广告:
  1. &lt;script type=&quot;text/javascript&quot;&gt; & Q$ u- s3 y" s* A
  2. var objFlash = new sinaFlash(&quot;http://ad4.sina.com.cn/200611/17/73696_gundong.swf&quot;, &quot;&quot;, &quot;279&quot;, &quot;56&quot;, &quot;7&quot;, &quot;&quot;, false,&quot;high&quot;); , w) n' S7 @& D1 o
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); " j0 V" a5 K v0 d3 `
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); ! v: h$ t$ P0 K
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。 5 E; ^2 @" G* \1 J0 M5 ], E, O, v6 O( c% Q$ D 新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 , U4 E1 W3 a% \% [: F+ G+ Q + v1 |9 L, U$ g& U2 l) U搜狐 (www.sohu.com) 3 o5 y. L5 m7 O搜狐的手段和新浪如出一辙,首先加载: 3 g; S* I7 Z6 p9 Z: N: i ( E) k f' T0 ]( e- \( H/ O: n7 O <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>2 n" g5 N9 M: ]9 a( M) M7 y 调用:
  1. var sohuFlash2 = new sohuFlash(&quot;http://images.sohu.com/cs/button/lexus/4501051127.swf&quot;, &quot;_bflexO&quot;, &quot;450&quot;, &quot;105&quot;, &quot;7&quot;);1 {- A5 `! _; A
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;);, H. S# A" }7 t& W0 g; B, a$ r
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);1 a9 |4 b( o! W L3 ?4 `
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;); i5 S( F( K9 \% L
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。 + U7 K0 f$ E# ^2 `* I0 _5 r: I0 j7 i! x. i, v' K2 p 你说是搜狐抄的新浪,还是新浪抄的搜狐? 1 ~( F" b. A# F 5 X& m0 m& T7 w/ w* U网易 (www.163.com)7 k/ Q8 J8 f( g2 w5 p# F& v \' W 网易就是不一样,处理手段显得很有技术性。首先加载脚本: 4 t9 g! _; j6 Z& x 2 j& I. H8 c$ J! X$ f( ~<script src="/DartRichMedia_1_03.js"></script> + q* w+ E- y& Z$ D. s! ?页面上直接用 docuemnt.write 写入 Flash 的HTML代码。) y2 }# N7 e5 X: ~ ; Z4 U5 k% X) F }& w/ G9 w* ` 按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { " f. N& }3 `9 T2 Q |# e
  2. dclk_isDartRichMediaLoaded = true;" J' o- I% h( w! i9 E
  3. function dclkWrite(str){$ f" L% O0 f# V0 O! p+ `. t& r
  4. if(dclk_shouldOverride) { " }8 k' }6 g! r* s! [
  5. dclk_original_documentWrite(str);' T. N7 e, v& e# u7 a8 V: {7 _* O
  6. }8 D# K E( G( Z5 A- N* ^
  7. else{4 D! G8 p$ ~) t d4 P
  8. document.write(str); 2 _9 b8 D7 G+ A( G' X
  9. } 4 s, q o9 ?! W; Q7 c3 Y
  10. }$ V! _6 u% z) L& f
  11. function dclkWriteln(str){ $ e/ Z, ~$ j$ ?0 l0 f: a: ~
  12. if(dclk_shouldOverride) { 0 Z* Y B K: G9 f9 A4 [
  13. dclk_original_documentWriteLn(str);; s0 t$ M* `5 j
  14. }1 L) @# f5 V3 z/ a3 ]' Y7 [
  15. else{- n9 w9 A% q5 m6 `( q
  16. document.writeln(str); 7 {1 d# z7 a, Y6 s
  17. } # U" F& V6 x: Q2 Z
  18. }1 n# H! U" ]( r4 q9 \3 U
  19. function dclk_isInternetExplorer() { ' z; y- A, K# r% u' e# E& m& Q
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); , d, Z' R. }& k4 Y8 s! z, F( {
  21. } , d8 V" {% u- c" c- U3 `8 Z
  22. dclk_shouldOverride = dclk_isInternetExplorer();, D5 J; D% `9 U2 H
  23. if(dclk_shouldOverride) { 5 }" e6 M2 ^/ t4 N" Z j8 |
  24. dclk_original_documentWrite = document.write;4 M" t* i5 [/ Q2 ^5 {
  25. dclk_original_documentWriteLn = document.writeln; 8 l9 [. K8 x& \: I
  26. document.write = dclkWrite;: X+ L: ^+ a- [
  27. document.writeln = dclkWriteln; # l" |5 X2 J6 Z' Q, N6 w: P( G# u, s
  28. } * {0 M" b8 U+ H
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 8 m* d$ u& Y+ |/ i) u4 l: a# ^5 y* H/ h! }; v. c% y/ M, X! i' ~ 雅虎中国 (cn.yahoo.com) . f& T" i7 R3 hYahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 " h `7 u$ I8 T1 |5 o. g2 j3 ?0 k 9 y a5 L) h& g 腾讯 (www.qq.com) 4 a' f, ^4 _' Q( g5 W默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。 : A8 c( u& j. l/ c3 n0 i/ p9 O9 e& b/ d2 z1 g$ [8 a 0 ^7 b+ M0 a5 t R + Z: v6 J3 z; p* x- q; F! B9 H 2 L. X9 h3 l% r$ }6 C稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。3 v) H% {8 l! C0 f" B& @9 j# ~ Y1 \4 m* u% h! j使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 Q/ `; W# _; Q- n2 x+ a- R8 Q0 Z# s3 g% j! s0 y: t 网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: & b- I% e& I& D: T& d8 Q: ]4 J % M J! _$ e1 b( ]//只要在 </body> 后面加上一行 + B2 i0 F/ H- ^5 Y<script src="javascript:'document.body.innerHTML+=''';"></script>. [* ~% A, Q5 g, Y8 {2 f6 d- I: m 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

回复:对比国内门户网站对Flash激活限制的处理

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。/ }6 T2 }4 x! x+ v" ]' V+ ^, h , ?/ G; @# \& F% C q- E我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。 I; F' O6 t W1 S' i: N5 `9 s% Q ' U' F3 J# Z& S+ [0 e1 @# \网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。" F' D; p9 w. c4 e + d6 }* O1 g8 [6 J) _# q% n8 u+ ] 可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。. ~) N0 V1 B! Z* T1 T% m) s 9 H! r" |. }* n! Y1 w/ }$ s& w 一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。' E4 E! R% b, z - V+ t' ^# v7 o& C8 i ]: aObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。/ G2 V E8 o8 Z. b ( v4 k7 _1 c- }/ e5 y) R/ K) E 最新的ObjectWrap 可以从这里下载。 % I, h/ U4 f: P 1 J$ F5 H; f4 f# \7 Z- N# K原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。 8 Y, s! N3 h! l6 r+ m3 G) Z/ r 7 Y3 I) ^, w- o- W( t) l0 _至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。& b. i) S6 y. v0 w( P7 f ( x$ A! a" v$ L0 h9 O 最后向ObjectWrap的作者 Karina Steffens 致敬! * u7 Z% h' u. V, J5 Q9 |& A I / Z, q, n* i2 u. Ghttp://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

 楼主| 发表于 2008-1-8 22:28:00 | 显示全部楼层

回复:对比国内门户网站对Flash激活限制的处理

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。 7 n8 B4 Z+ `8 i! X" l I - }( q2 `9 D: x0 j当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: 7 S4 ~! a x( q1 b: u + O2 A( \4 R$ F9 r# Z1、新建JS文件: + X5 o6 S' H) K. W" t ]' S/ c5 J/ \" s$ Y( x //v1.0# U9 x: B! y y" d0 B //Copyright 2006 Adobe Systems, Inc. All rights reserved.+ c" n6 w1 O4 `1 a/ _ function AC_AddExtension(src, ext) ( d4 _! H# t0 \2 c3 }{) N& w2 t, }2 n if (src.indexOf('?') != -1) 3 ^- X4 P/ ` I( i1 l6 N return src.replace(/\?/, ext+'?'); 9 y# o" T6 L Q0 _ else ! J" @ _' M' F( @# N# N return src + ext; + B3 C9 P, E4 |# \. n, h" F+ k} # |/ U- i# Y2 Q- E$ w! }( R" n) [- o* R5 _0 J function AC_Generateobj(objAttrs, params, embedAttrs) 0 v! e7 _2 ^3 p6 Z/ q4 |{ ; f/ K7 u o) `: q; y2 S2 R var str = '<object ';' [' N. S7 b' b for (var i in objAttrs)* d @3 S9 V4 }' f9 B str += i + '="' + objAttrs + '" ';2 U# |+ T' e$ w+ ^6 D str += '>'; * G1 R. Q: [( f: U5 P& Q for (var i in params); K8 E3 q' T; ~/ Q5 | str += '<param name="' + i + '" value="' + params + '" /> '; ; `! n0 @( m8 O% a# ~ str += '<embed '; ) @7 | ] N% u. l2 `- y1 {' K for (var i in embedAttrs) , S6 @, D) @. |" v( g9 Q% x/ ^8 {/ _3 k str += i + '="' + embedAttrs + '" ';! M4 x) C/ i G3 b7 F- D& m t str += ' ></embed></object>'; " w! ?4 G) g5 U$ S7 d( o3 c7 M7 E! V% h | document.write(str); " A5 b4 W2 c _}" _( e/ ?' I- J: F, Y / g$ l1 a) ]6 F function AC_FL_RunContent(){ 7 p. w, C/ u; S! [7 X: E5 F var ret = 4 s& W3 U- `4 J9 X AC_GetArgs ! I1 ^5 v* D0 h) w) }; H ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ) t- ^7 N. \' t/ ^* ^ , "application/x-shockwave-flash"! o1 D. H( f: D j0 l- j9 y );& |3 }' Q, H9 W- [$ }; P6 ? AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);; r1 [, U2 U/ n& p( u }2 y, T5 V- l1 v: w; Z * B0 X" _+ j+ Lfunction AC_SW_RunContent(){& F0 r, l/ `9 ]) l5 w- X. i7 s var ret = 1 S4 E: [, u3 y! u3 Q AC_GetArgs4 ?* V- p6 e" v! N2 K ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"/ `8 |* t1 |7 X5 Q: y4 C , null 3 ~6 C! M$ E9 y0 g- a ); + N% N! _3 Q# i. ^6 Q AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 2 l3 U; ~6 C, c" d& a} ) [0 S" J5 ~" ~0 `0 O& D . N) |# l" ~/ Z2 Ifunction AC_GetArgs(args, ext, srcParamName, classid, mimeType){ , y) _& Y6 c* E9 V var ret = new Object();1 {2 k6 l5 b6 m ret.embedAttrs = new Object();: M1 a& Y7 _: X7 q; _ ret.params = new Object(); $ v. j8 W" ~ q8 @ ret.objAttrs = new Object();0 N0 }: Q# [9 L4 b( s, P9 X for (var i=0; i < args.length; i=i+2){- u6 {- Y, i% ?2 M var currArg = args.toLowerCase(); ' g4 ]1 }- Q, d* d( x5 M& V 7 t; L! |6 ?1 F" U* Q% ?. O& i! v2 b switch (currArg){ 3 S1 \: X' @; [' E$ f- P case "classid":( \/ g7 L2 K& ]6 Q# K break;8 Z# G% y" e; u# r* {: Q! T case "pluginspage": 2 N! M; e& \3 n/ m ret.embedAttrs[args] = args[i+1]; , q5 O$ q4 x- T7 D/ y. X: J: c0 \ break;$ s, R" i: Q! R' Y2 I! K case "src": ) v" L8 a0 D. x) {/ g case "movie": $ R% o. l e2 e& ]8 D7 v# J args[i+1] = AC_AddExtension(args[i+1], ext); . N' D$ W( Y& n& j: J ret.embedAttrs["src"] = args[i+1];' z% S8 Q$ [& K9 ^7 |1 _4 K( e: n ret.params[srcParamName] = args[i+1];8 }1 ?) r- [# a# F# c break;# J5 l7 a. z6 K( T; k case "onafterupdate": " J3 d7 Y% _7 O: u* x# ? case "onbeforeupdate":2 @) x( n2 _1 ] case "onblur": " G- t4 K0 \. e' _$ o9 j8 H5 M& ]6 ? case "oncellchange":8 K9 }* `0 M i4 w& ^& Y! R case "onclick": $ I" ?' S3 g7 E4 F case "ondblClick": 4 R. E4 ?. [" {) F case "ondrag": 7 u) Q; ^1 w0 O# |% v case "ondragend": ' K% I/ h8 O& l( v# G; ^ case "ondragenter": / @5 B8 ]# k1 A, |$ ]' z. }9 b case "ondragleave":- }: n9 |9 Y! ~* ^ case "ondragover":6 |& F3 a5 ]4 j. W case "ondrop":) K) \6 H( A6 y* s, _6 ^ case "onfinish":4 h' s( P: X* A! l- o9 n" A4 i case "onfocus": ' l3 O1 T4 y0 }) R! S case "onhelp":6 U& \+ N+ A( l4 ~ case "onmousedown":: G; J- @" p; x' m* h case "onmouseup": % ?8 H2 K6 P2 c8 V( o case "onmouseover":7 w! D7 S9 ^4 W7 W# Z9 e( d case "onmousemove":* L! V5 J& ^9 j case "onmouseout":) a2 ^" i& ]7 p, l1 e case "onkeypress":9 j/ H; X* B" d b' C8 @ case "onkeydown": ; J$ R; n4 g( N% q6 W7 J$ t- a# t3 f case "onkeyup":6 c: A! D$ l& s( }9 r' m0 f( k B case "onload": - H. n+ H1 j: o& b& G" Q case "onlosecapture":7 b9 z( M+ u! Q2 ?0 U, b" W case "onpropertychange":3 |! N) ^$ Y! P/ J0 h; u: ?$ w. A case "onreadystatechange": 8 W. ]- r9 g" z! W* b case "onrowsdelete":, l2 a E2 e) ]8 u- N2 P- y$ Z- v case "onrowenter": 6 A; w9 F5 l, e! n# ^1 p case "onrowexit": T3 k* O ?2 ]1 O0 [9 D( J# w case "onrowsinserted":; P I# o' r2 n: Y* Y case "onstart": : ^* \- v+ G4 T) O5 V/ k! P case "onscroll":1 }/ C' F; @$ d case "onbeforeeditfocus":& ~4 A3 Z) D' L+ R' A# e case "onactivate": * x2 a4 O: j6 i( y4 k+ b' X case "onbeforedeactivate":0 l/ ] G2 o8 g case "ondeactivate":! V8 Q' [$ B# V- V D$ N& o7 c, Y case "type":1 ]& _7 Y: l% K; z, Y2 l* B case "codebase": 6 _' E/ B+ T7 B" r ret.objAttrs[args] = args[i+1]; ! d, x/ C" d/ @. X- ]1 ~ break;; B# ?& } l4 t0 z case "width":7 e' B% j/ [% z( w case "height":2 s5 P: c7 E7 n7 Y6 j case "align": 6 n* C3 ^4 ]. |5 u8 {2 }4 V case "vspace": - S+ O A; o6 W! F0 h; v' {7 Q- c case "hspace": 0 s" Q. g+ c* F7 G- \ case "class":# C. g) e" f* E% R- H case "title": 5 `6 L- B) Z6 a, q! j* W2 W2 X case "accesskey":# O C# [ Z, C+ T6 z case "name": ! @. V: D7 ~0 W case "id":8 }8 {1 [0 P$ U7 i& w" k# I, Y: I case "tabindex":( L8 ]2 ]! w g7 u m& t w ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; ; w: z+ v) K/ I6 ^8 ]8 k7 R break;* U# V- e# i3 y( Y& M default:' R& v$ N% H: K ret.embedAttrs[args] = ret.params[args] = args[i+1]; ) c% r! E' p( F) G- ^ } 7 } `# Y) ^; M2 I9 m: G }. o: m3 X% O7 @3 B! g7 E, u" G ret.objAttrs["classid"] = classid; 7 a5 m9 G: ^1 d5 M( y/ {* { if (mimeType) ret.embedAttrs["type"] = mimeType; 7 K R, y7 i, S2 D) y return ret; 8 J3 }" Y5 _5 B} ) u( r7 U) f) `% Y! \ @ h* m* E& e5 q 2、保存为:AC_RunActiveContent.js % H( f* k- }% i5 n/ l. r1 H) N! @; o$ P" r+ y. |2 P 3、在所需的页面中添加; R k# S5 s% s; V8 o% {% W % @. z. S2 l; B! C7 s- }9 M4 o+ g <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>5 i8 D1 y( z7 d L1 y5 t " K9 R' E5 C7 g+ `, P" r 4、在插入FLASH的位置添加: $ H1 g) A2 A# G & D& J6 y" l a$ P4 Y<script type="text/javascript">AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','1002','height','600','src','index','quality','high','pluginspage','http://www.macromedia.com/go/getflashplayer','wmode','transparent','movie','index' ); //end AC code</script> $ G( h6 }( J4 T2 D$ e<noscript>, e: @" B1 T; |% N* e' W1 H6 w <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1002" height="600"> 1 X% w+ O* v3 |6 Z9 @<param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf"> {5 O1 ^) b' e. N9 B! A( ~ <param name="quality" value="high">( D$ `( C: [, M: b <param name="wmode" value="transparent"> 8 X1 O: y N; r, `3 e<embed src="http://www.webjx.com/htmldata/2007-04-22/index.swf" width="1002" height="600" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"></embed>1 I' k( x) J8 T) V! C! b </object> ' z: P. C; U p0 l* b! q$ ]</noscript>8 {0 ]: u3 X0 |0 c5 ]6 g , i5 e; d2 k8 B7 n) O3 V6 [ 5、页面中的完整代码: 7 F2 A; l+ g$ {9 p3 B/ h, |& u8 h1 L" v - a$ m0 I3 G1 R1 p( o) _! m- H<html> & h/ ^/ e0 u$ ?7 I6 o/ i<head> : ~8 v& A7 l$ ~) H7 A. F9 H+ j" H<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> - p9 r+ W: {$ p. j# w<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> ' Z3 t9 x0 Y; v5 h f<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径--> 5 e9 v! `# E1 K* Y& c( V4 h' T<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>) C/ N$ |0 W5 F/ [' X! X <style type="text/css"> ! x% k0 k) A" K. @" A<!-- e# S$ A( u7 N- s# @3 Q5 }5 jbody { 3 h( j& [6 [2 L background-color: #CCCCCC; ) h. E0 [ N2 H} : T$ d2 D. e1 t' s: n-->/ x d6 F) r. e0 v# q </style></head>8 a) ~" n9 K3 L2 m9 w9 s <body> ! E/ `5 {3 l- }: \4 K ( H2 t& f( V( M9 ?* u8 P. |- D<!--下面这段JS修改的时候要注意,一共要修改四个地方:" S- t/ P( t, p# r$ \# ?" s8 j 300 是宽度; ( [7 U8 [- M2 {200 是高度;- O1 N/ J5 G& I6 y! C3 e7 d images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中--> b, W3 E' {3 x. V<script type="text/javascript">AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0','width','300','height','200','src','images/killIEBorder','quality','high','pluginspage','http://www.macromedia.com/go/getflashplayer','wmode','transparent','movie','images/killIEBorder' ); //end AC code</script>7 {) y* A" |+ b4 S; L <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。-->9 i. h- f: r8 q" p' c+ O) V# J7 [8 G <noscript> ( C! n( j! K( H' W<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="300" height="200">, Z% J+ y( L% a+ { <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> * X8 ^5 g X. D; w; [ <param name="quality" value="high"> # T! Y' x$ i& A3 P' y1 x% u; m <param name="wmode" value="transparent"> ' e5 Y& `/ G1 K4 q <embed src="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf" width="300" height="200" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"></embed> . p8 g) O" C2 P& _. ~, ]4 w</object>/ L; m" Q2 _; X1 O1 Y3 I </noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

发表于 2008-1-30 23:02:00 | 显示全部楼层

回复: 对比国内门户网站对Flash激活限制的处理

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧! 1 J( H5 i" D# }- [+ n* F  今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! / |9 w ?7 z! }: u# ?; J  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能! # P( ^0 e, V4 x2 t  不敢独享,先建一个JS文件,写入以下代码:8 l1 |, H) u; z! [/ A. d# D 0 @; \/ ^$ i3 v8 W( P* x% p
  1. function al(){ 2 v1 E' F% U( D* K
  2. alert('ok');& G) K% K2 t! H8 F9 [; s
  3. } * [; B; v# w2 O$ f5 P" K' A
  4. function AC_AddExtension(src, ext)/ I* V5 P2 q( j8 c
  5. { ! V8 K% [( {8 |; x( P
  6. if (src.indexOf('?') != -1)+ S3 K8 @# j$ r/ i u1 W( H
  7. return src.replace(/\?/, ext+'?'); * L+ w4 \- k6 J. d+ G: E
  8. else , J3 L& }" m; ]% e* q! t6 q
  9. return src + ext; 6 T9 C6 i/ Y- x- g0 V$ v
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) 1 C0 s1 D. G2 w
  11. { - C: D( x5 N: t! X& E
  12. var str = '&lt;object ';, Y X+ L; S8 S( q7 r
  13. for (var i in objAttrs) ; O! R9 W, e0 @: U0 y$ C
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; '; ( D7 o1 P6 Y. {1 e5 p, i
  15. str += '&gt;';3 ] V, L% Z( y# B" _3 m' M( R
  16. for (var i in params) 1 }3 Z4 v. o7 N* L1 Z
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; % r' N+ j# P) H0 W
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed '; 6 v5 \0 Q" @, g& s9 z/ m9 c8 u
  19. for (var i in embedAttrs) ! [+ O q2 ~$ ~+ p
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; + q q, b7 s$ s& m$ W" m1 W) \7 k
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); - @: x5 V4 {$ w* ]/ Q8 o1 H- ~% C) k
  22. }function AC_FL_RunContent(){ 6 r$ t, q: k* D# H. O y
  23. var ret = 2 F% s& Q2 S, z6 i, i: W
  24. AC_GetArgs ; W, _, |" b. m
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; 8 \3 u4 Z9 _" i5 q* W0 \8 e
  26. , &quot;application/x-shockwave-flash&quot;- \* B: k4 F' v7 q9 G- g+ N
  27. ); " _8 b- l- y U
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); ' h3 s! V/ ^) u, N) J1 {' M& }- r
  29. }function AC_SW_RunContent(){) C- y# X0 U# j, Y M( c* h- R8 m4 \
  30. var ret = 2 [0 e7 |1 K; J5 W
  31. AC_GetArgs . a' L) P- O @
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; , C+ p! I5 z/ z# D7 H% m: p
  33. , null * m% y6 a3 ^+ ~# j& @" K" H# [
  34. ); " D% X j! t }- J. \/ g) m, }; s- L
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 9 g6 W: e5 U! z) ~% G; t
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ / M! s- f0 \, f( v$ m9 |
  37. var ret = new Object();6 X& ~! F) y+ @% }4 ]0 w
  38. ret.embedAttrs = new Object();* r( Y; j/ Z3 F! U* ?; C' \1 k
  39. ret.params = new Object();7 D2 Y1 s2 U- K( |, J
  40. ret.objAttrs = new Object();3 y: t* x B2 {
  41. for (var i=0; i &lt; args.length; i=i+2){" c9 P1 S. s/ M. R5 b
  42. var currArg = args[i].toLowerCase(); switch (currArg){ , _, h& i% X! l1 e
  43. case &quot;classid&quot;: , B0 G4 W( H% b! b$ x9 z
  44. break;' v3 Z( E+ ^( [. I. `, @; ]0 Y
  45. case &quot;pluginspage&quot;: , L* W0 t z9 e6 x# W' ?7 b5 O Q
  46. ret.embedAttrs[args[i]] = args[i+1]; " X4 J) P! [8 ^6 @
  47. break;* x; z G8 v* O
  48. case &quot;src&quot;:7 V x3 O+ p: _6 g
  49. case &quot;movie&quot;: ) n, e3 J/ X2 L/ j$ M
  50. args[i+1] = AC_AddExtension(args[i+1], ext); $ {+ o( e- ]) M; O
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1]; & c( R0 D4 k9 _- Z7 x, F' I
  52. ret.params[srcParamName] = args[i+1]; 7 z) M9 C4 a3 a* V7 b
  53. break; 1 `7 |: Z' k/ v1 z" P) t G
  54. case &quot;onafterupdate&quot;:; J# T) B+ T- m! R* v$ H8 o q$ N) f& I; e
  55. case &quot;onbeforeupdate&quot;: . P! }) _$ F! P3 y; s
  56. case &quot;onblur&quot;: - Y, ^9 S1 ~! `9 t2 n
  57. case &quot;oncellchange&quot;:! i/ T' A9 J! w) V: ?: h
  58. case &quot;onclick&quot;:8 J1 o3 Y/ u. }/ c8 s) Q
  59. case &quot;ondblClick&quot;: 4 M ?8 b: K8 u5 _' c
  60. case &quot;ondrag&quot;: z& h, x0 }, [* N+ t/ x5 C
  61. case &quot;ondragend&quot;: 9 [' g7 ]! x7 p) L
  62. case &quot;ondragenter&quot;: & i( W9 L/ z. J3 w4 V! b7 M* _6 H) [
  63. case &quot;ondragleave&quot;:; g# g9 _6 _2 ^( s+ S0 w3 d; t4 D9 M; s
  64. case &quot;ondragover&quot;:; n3 Q$ ~# ~9 \( [# u. r
  65. case &quot;ondrop&quot;:5 `# E5 x: e" {1 X
  66. case &quot;onfinish&quot;: - I2 y% s% k- ]! u0 U
  67. case &quot;onfocus&quot;:. F2 L5 x( }6 q; J& M" V
  68. case &quot;onhelp&quot;:* a8 k/ n9 k" P
  69. case &quot;onmousedown&quot;: 2 E9 n1 ~/ o) D
  70. case &quot;onmouseup&quot;: 6 p2 Q4 }: r" X$ J4 h0 v
  71. case &quot;onmouseover&quot;:! i! V9 Q3 y: }6 W! ?2 q* e7 H+ ]
  72. case &quot;onmousemove&quot;:8 x) N9 k K5 N
  73. case &quot;onmouseout&quot;: * _1 {% _/ Y7 M) A( S
  74. case &quot;onkeypress&quot;:$ _) M" f! I4 a( V- L# L1 Q
  75. case &quot;onkeydown&quot;:, E; M a) _& }( _! _2 }0 r" O
  76. case &quot;onkeyup&quot;:$ z7 p, I4 r* w: B7 P7 @
  77. case &quot;onload&quot;: 7 h: V# M+ N" Q" }" m3 ]
  78. case &quot;onlosecapture&quot;:* H& p4 T h- \1 t" k' l
  79. case &quot;onpropertychange&quot;: ( m: ]: j/ m1 k+ a* K2 [& W
  80. case &quot;onreadystatechange&quot;:2 D" S- a) A3 B: D2 c2 h
  81. case &quot;onrowsdelete&quot;:8 \3 D6 H. ~5 G
  82. case &quot;onrowenter&quot;: O, k# v: l/ T% b
  83. case &quot;onrowexit&quot;: : t8 v: w! \6 F/ }
  84. case &quot;onrowsinserted&quot;:' S( Q% S8 i1 i' K
  85. case &quot;onstart&quot;:3 L& j: d3 H: _
  86. case &quot;onscroll&quot;: 1 Y5 Y& {& b6 T5 r( Z4 l8 k$ M
  87. case &quot;onbeforeeditfocus&quot;:: G6 ~9 s5 y7 Y& L3 P7 J% s' K
  88. case &quot;onactivate&quot;: 3 F" `" x1 a0 S& F" q: R6 }
  89. case &quot;onbeforedeactivate&quot;:" v" C4 t; J6 ]( t$ \
  90. case &quot;ondeactivate&quot;:/ X/ z/ i \* z( w1 w+ Z3 @; B
  91. case &quot;type&quot;:' z3 ^3 ~: b& a2 _) ?- |3 n
  92. case &quot;codebase&quot;: / t% \# W" v9 R9 T; j5 s8 W$ t
  93. ret.objAttrs[args[i]] = args[i+1]; + @" q4 Z4 x' f3 \, z
  94. break;# z d/ E$ a- c; O- j: @ T
  95. case &quot;width&quot;:. G. f. M7 e1 X7 \- h4 f
  96. case &quot;height&quot;:$ v- }: Q# H* }* P5 ? [8 J
  97. case &quot;align&quot;: o' J" j& g X. ]
  98. case &quot;vspace&quot;: " Z! s) C+ o+ g8 ^% U
  99. case &quot;hspace&quot;: # H- O- {4 Q3 A% d% r7 U1 A
  100. case &quot;class&quot;:8 X$ L5 r; K% C
  101. case &quot;title&quot;: - H1 P- T% Q4 q, R* C" T$ l
  102. case &quot;accesskey&quot;:) a4 H* W6 V7 w! B* P2 Q
  103. case &quot;name&quot;: m' D6 r5 l: |% L
  104. case &quot;id&quot;:# o) [+ k9 F8 c: U) C7 c1 C, |+ x
  105. case &quot;tabindex&quot;:# H: }+ d) {* c0 w6 l
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1]; . b5 z% j8 S! b/ r9 e0 C
  107. break; 0 ] \, E H; J! G/ z6 F3 X( Z) C7 Q
  108. default: # b4 b5 X5 j9 u8 {( V
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1]; ' Q' y3 z0 g6 m# v% @
  110. } 2 G+ ]6 }8 @* N* W- T- |
  111. } 4 c9 m$ n' B' V! G% l2 H1 A3 t
  112. ret.objAttrs[&quot;classid&quot;] = classid;4 j4 ]5 T- h8 |% V* U/ \" \
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;* s$ M9 Z! ?& e; G7 ]
  114. return ret; 4 W/ [# t5 X. j+ j' ]. J
  115. } & }' }3 [; l: f! F
  116.   
复制代码
: G! i5 P& X2 e5 i" F% o然后在要实现这个功能的页面上,调用这个JS:0 T. v( U- L! _1 I+ X * ~1 D; C% k7 [" i
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  $ v" w! T+ x6 v. f% O% i7 v+ `) Z 4 I$ }8 e v2 _& \0 W' E5 y然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:3 G" R3 H- i% i% j6 ] ; x- {& q- c& u
  1. &lt;script type=&quot;text/javascript&quot;&gt;, y" c2 R) X5 v& Q& G) k+ I& d5 [( z% a5 c
  2. AC_FL_RunContent( 4 b2 ?" ~$ Q5 V' z; M4 [ T
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' % Y: I& k" _7 O! A) i
  4. ,'width','524' //FLASH文件的宽 3 K) _, E: q) U0 ^7 v7 N, P
  5. ,'height','55' //FLASH文件的高 ' h. y$ m- b" z& u
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf & I$ P$ @5 M k' J4 P
  7. ,'quality','high' //FLASH文件的默认质量3 B) ?' T1 Q; f
  8. ,'pluginspage' : ]1 Z2 E: V( H8 e
  9. ,'http://www.macromedia.com/go/getflashplayer' 3 P U$ X/ b' V+ H
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 - m+ K( F/ y1 q
  11. );; a; z8 `# m+ E( }
  12. &lt;/script&gt;8 H: l/ ~; x. q. @+ ?& }
  13.   
复制代码
大家快去试试咯~!
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

发表于 2008-1-30 23:05:00 | 显示全部楼层

回复: 对比国内门户网站对Flash激活限制的处理

还有更简单的方法是重载object,在网页加载以下js

objectSwap.rar

2.29 KB, 下载次数: 0

rar

遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 入住遨海湾

本版积分规则

网站解决方案专享优惠-3折上云

QQ|手机版|小黑屋|遨海湾超级社区

GMT+8, 2025-2-19 07:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表