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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。/ Z3 R. P. _5 p: e, C* I% Q ' h3 H- `9 n2 C. s( q, q 最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。, N! w% ?( D) p g, }( _% w # z& d) t8 k. a9 d 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: ; [) Y$ _( s6 T% P; l- Q8 b0 S* H9 H2 ^7 Y+ } O 新浪 (www.sina.com.cn) ! a+ i1 e" z# y首先在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; 1 [9 J" ?) S- V% S
  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;);2 B6 v# |9 u9 j6 M% p6 P
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); ' R. I1 [" }+ K( X2 I
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); 8 H7 a' ]8 [6 u1 Y9 b1 E
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。4 o7 @8 B {1 ^6 I( F + N. W: u4 Y! ^% H. S7 _ 新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 % W9 ]) h* Y) ]+ D( T" U % O# |. L. A1 v3 d4 x V( S" e搜狐 (www.sohu.com) $ i8 [+ C7 z7 ]" u/ B5 W搜狐的手段和新浪如出一辙,首先加载: 1 T: X1 d y8 x + n8 n! O: G) i2 Y A. d<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>: e h) S( t& V4 @. r 调用:
  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;);/ e. a: s1 z. S) D! r
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;); % O- i) L# Z; `3 P
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);1 J9 h/ c% o0 |
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);8 F. k& o- X# x$ J: ]0 \$ A
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。) A* F: G2 Q6 b/ N4 r 4 l) e# k% K" N" [4 c 你说是搜狐抄的新浪,还是新浪抄的搜狐? 2 m. ]6 j7 W1 Q: h, M4 y0 O 7 y2 g( Y# Y0 u9 p9 @5 L* O 网易 (www.163.com)6 n2 x7 U) j; t) \7 F% `1 n, r3 I 网易就是不一样,处理手段显得很有技术性。首先加载脚本: % `* J" x4 b' e& m* ~2 }8 h0 m5 t3 G6 B( ^) V5 \ <script src="/DartRichMedia_1_03.js"></script> ! L) s: j+ P0 i6 @1 r页面上直接用 docuemnt.write 写入 Flash 的HTML代码。 " {9 w; z7 J! w8 [- F7 x" C) M2 X/ A2 I) C 按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { # X- V2 ~, h* X: @
  2. dclk_isDartRichMediaLoaded = true;7 O9 L: }1 i% Z6 s% o5 e
  3. function dclkWrite(str){ $ f" F# \# s; ?' q& @+ u
  4. if(dclk_shouldOverride) {$ Y( ]2 ?: j% I i
  5. dclk_original_documentWrite(str);) V. D1 C6 B, |& b
  6. }6 N4 r+ W v* ]* ?" U
  7. else{ $ j9 j$ b% N1 D% ?4 O6 F
  8. document.write(str); 6 `, P6 {( a9 J9 I- ^/ ]
  9. }; G) ?& I8 p! M+ r# {
  10. }7 N1 n$ x, t9 x% G' `! I# y. |
  11. function dclkWriteln(str){ $ p2 P4 Z( t2 A0 Q
  12. if(dclk_shouldOverride) { 6 L3 P9 L) S% n+ H: T; Y- s
  13. dclk_original_documentWriteLn(str);8 ?, h. X W- y# B( P, o
  14. }4 l0 m$ p1 }0 n3 \8 b6 Z: u/ s) f- h
  15. else{( p6 ^6 s; R! U
  16. document.writeln(str);; Q7 R5 }) m$ i) [) C- B
  17. } 1 L7 x6 o- B( y% d o, d# z. s
  18. }) ]: f* n2 k p$ A& B
  19. function dclk_isInternetExplorer() {/ o [% \+ [4 }" `. w& T! V: p
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); a& X. [5 b7 s0 |9 y( }
  21. } 3 B {. K3 ]- [; c$ t
  22. dclk_shouldOverride = dclk_isInternetExplorer();* S4 e+ Y. r+ ^' Y
  23. if(dclk_shouldOverride) {% N/ A7 W! w+ J4 A% G" k
  24. dclk_original_documentWrite = document.write; & u( c( z2 l2 e
  25. dclk_original_documentWriteLn = document.writeln; 4 `9 r6 H1 w- E6 q
  26. document.write = dclkWrite;7 K/ ^% X4 h L3 A$ Q i z' ~- g
  27. document.writeln = dclkWriteln;) b8 D% ?* K, x- T$ h5 a
  28. }2 {. {$ u% r0 [" N0 {- j
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 9 z. l4 L" d$ f# L 4 E. J1 C3 }, H' ?雅虎中国 (cn.yahoo.com)0 J& v2 N9 o& [ a6 v a5 c' T Yahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 5 @$ {% Y, J& d2 l) ] " ~9 o& b& \ h" o- z+ t腾讯 (www.qq.com)$ Y* | L3 U. x+ c( G 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。: W" ?$ p/ H$ o5 T) k0 l8 N. w 0 ^8 M' g) F1 I2 a9 s" E' [( Z" K1 U4 d3 O 0 f- L! J0 K! L- J, q* Q2 R' l, @- j( z 稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 4 Q$ P" x Y# [4 W! Y # N9 ^6 J3 l$ Y' h使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。. t) {1 L- t' o( v% n8 i9 R6 r 2 [" e" V' O( H7 A. E网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: 4 w; q- ^5 {; i" e! J3 X/ @, t; e% C' c6 ]+ d. ^ //只要在 </body> 后面加上一行 ' E0 f k: V h- ]. A<script src="javascript:'document.body.innerHTML+=''';"></script>* ]; o. P: L2 j- E% O* A/ m 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。) R8 J/ Z' @' M) `* K 3 e `8 _+ _5 h' [我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。4 W/ {& a M: ~ 0 T2 y8 M3 l: d' r网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。& n) l9 |6 j3 { - A$ b x) C5 s4 w8 E" }可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。 9 Q- b5 ?# W- n3 f* k* D 1 @+ X8 P4 G3 m0 l8 {# f" a一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。7 C, n |2 A0 `. J2 z+ P1 V0 e . z4 S7 z2 S) z& ]4 K2 h, c ObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。7 b$ i: a( ^$ d9 H* S, A % N) J# y5 y% O$ J; V' V) e" D! X最新的ObjectWrap 可以从这里下载。 3 N2 J' \& Y5 x8 W + |) k0 s' `9 S9 m& A+ z原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。 ) D. `3 k; V# }2 X0 ` : l9 J/ w; D& ?: f7 r至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。1 D4 K3 V( w+ @9 G/ Y( s% I * o7 _- d) [6 d6 ?最后向ObjectWrap的作者 Karina Steffens 致敬!! z" `1 w' D; d' P6 o! w1 B' c 4 ?7 m7 o& H0 F9 q/ k2 qhttp://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。( o4 b# z5 p! W6 _ `+ k, x) a3 o$ y# Q+ V当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: c7 u, e+ K# n9 }' c" Y- G& c8 n$ G$ x, P# L1 N 1、新建JS文件:0 a- S& Y5 c1 ?0 V' F$ i0 E + @& k' z# L9 W7 |$ [. F//v1.0' i, o- l1 ?1 W$ E+ }9 y //Copyright 2006 Adobe Systems, Inc. All rights reserved.- f7 k4 n8 x" `, T1 t! u3 O# I; W function AC_AddExtension(src, ext)# G7 k$ P& c4 h4 m2 o% y2 E {; t% n$ B" ?% d; X7 \ if (src.indexOf('?') != -1)+ |& F! U |1 s# {$ X9 d4 ` return src.replace(/\?/, ext+'?'); 1 ~8 w O: H+ x7 y- Q9 R: \: F5 a else! ], ^- X2 U! L: y return src + ext;5 q" q% O. y% z) C) c7 N, @+ Y }! M) M( \) G2 R! U& H b; L2 t ! |# y! x4 ?$ M6 Z" |, q* ]0 Tfunction AC_Generateobj(objAttrs, params, embedAttrs) % ?6 z$ f6 T( {% K& d- d{ * g0 H. m4 C1 Y3 O var str = '<object ';* l W9 ?4 q' i/ j, O for (var i in objAttrs)9 d9 G& k* J% q) n5 v1 g8 n4 _ str += i + '="' + objAttrs + '" '; % v7 V q0 {+ d* I5 y. I4 s str += '>'; 0 g" p. m! y4 S for (var i in params) 6 J: @+ {/ m( ]. z# G6 y str += '<param name="' + i + '" value="' + params + '" /> '; F- T4 R4 O+ V! |# b) i( o0 L str += '<embed ';. k1 \0 O4 S/ I4 q- J for (var i in embedAttrs) 6 b E" D1 F' n: Q/ b8 O9 v( D2 g str += i + '="' + embedAttrs + '" '; " ^8 m- c" \2 n* j) q str += ' ></embed></object>'; % m! N4 [" V6 Q; J, d3 H; B- K3 H0 F1 j; \: o/ g document.write(str); 4 G! A, L; d) r- n; l2 e}+ J9 o5 [, y8 d 6 x$ M' z' m$ n w" Wfunction AC_FL_RunContent(){7 X- k" B1 E# a6 |% X var ret = ! \7 y# B* s& F) l, c6 ?9 F AC_GetArgs $ F0 F, C8 D" C( G ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 8 r! U/ B- o* T) r, I , "application/x-shockwave-flash" * {# Z: J+ d) f# W U );5 [# e" G4 Z. B) R& t/ S AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);9 k# u$ y$ e! t. ]& E+ \6 i! G9 K }0 K) B# r9 j( E# |( \ : B8 I9 S, B: u. G" d) _ function AC_SW_RunContent(){ ' }/ e$ R3 q$ V; y* \9 M0 X var ret = ) q! X f% B: `' w7 C AC_GetArgs2 ~. C4 O/ N4 ? ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" / c- N6 V9 G. G& M4 r: r# }" ? , null0 T; }/ `' q( s1 _$ j );$ J }5 \$ l0 Y" a( T AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);/ ]9 W7 G/ j( ^) I9 W* b } 6 t3 ]3 m/ i3 o9 Q6 L5 n / M- f. n& ?+ Ofunction AC_GetArgs(args, ext, srcParamName, classid, mimeType){ ) h o% b' k- W0 ^ var ret = new Object(); / K3 H. K3 T! B9 i1 B ret.embedAttrs = new Object();1 @' F5 I3 J0 J( X" I& t ret.params = new Object(); : K. Q5 F. b. @0 X% L4 _ ret.objAttrs = new Object();3 c" U; o# `/ ^ for (var i=0; i < args.length; i=i+2){ 1 Z/ J. p2 P" j4 [" d. ?; Z var currArg = args.toLowerCase(); ! y& I5 K0 X m 3 s% W. J+ U) @$ E/ w# b0 d switch (currArg){ 0 [, s- l7 v. D' e: l case "classid":- a! a' O5 l9 a# i+ _ break; ' c* I F/ Y' n7 M5 ^0 V& k1 |# a( N8 C1 \ case "pluginspage": $ T& f) J% F. Q4 n ret.embedAttrs[args] = args[i+1]; 4 |8 k" _ H* j! _3 Z break;% l, Y0 x0 |; o7 F9 i5 T case "src": ! U8 ]' ^5 V7 N4 ^& [! p case "movie": 3 ~4 v# V B: y @0 M args[i+1] = AC_AddExtension(args[i+1], ext);; p+ v6 Z( h, l W% _/ R: ]2 D ret.embedAttrs["src"] = args[i+1];8 H, _ d- w% `6 q. B ret.params[srcParamName] = args[i+1]; 3 D t7 l, r( X, ~7 W1 ?, @ break; 3 D% e8 n# H) O case "onafterupdate":. V7 q" c n0 I case "onbeforeupdate":+ X* B# T0 {1 y& y! O case "onblur":; ^* ~# [: u5 ` o3 Y- L% c case "oncellchange":" g& Z+ M- b8 L- D1 C% V case "onclick":/ @8 I% @( D* m8 \3 G# p case "ondblClick": + M6 m' n9 v% I8 [9 P0 r( P" B case "ondrag":( a* E- K# f2 ?' z: F case "ondragend":) C3 g; \/ i- {: k case "ondragenter": - P; E$ ?$ g( W2 b case "ondragleave":1 U6 x) U+ Y2 G- V case "ondragover":4 J2 ?8 z; z" F. H# H case "ondrop": ' W& a% c0 J1 Y# o; u- F/ [* L: ? case "onfinish":2 j+ y6 [ r. O J case "onfocus": k" j0 T. z' E# Y case "onhelp": ! u7 z5 s& R; ]9 i6 o. K case "onmousedown": $ U0 w. S7 F1 F, A/ M% p: [ case "onmouseup": ; V. X, }! a5 k G1 R/ Z) Y: N9 R1 G( v- H case "onmouseover": - `' x. B) S/ s case "onmousemove":2 }0 G8 i& a* Q3 u( d case "onmouseout": 6 ?4 J3 n2 l7 Z4 _6 e0 R case "onkeypress":' J1 ^" V% p8 J) C. s% s case "onkeydown": 0 u% ?/ g5 Q1 p: ]/ J# o case "onkeyup": 1 p6 N: \; r. D) i! ?$ L' t case "onload":/ [' O- Y) t! P3 E8 m" R' q# z case "onlosecapture": 8 H" A' S5 `) X+ T$ D8 U4 b case "onpropertychange":- L0 n; G ]7 w case "onreadystatechange": 4 s) @% z8 c$ }3 U( \ case "onrowsdelete": / s5 b8 F2 F: @* a0 `4 V# m case "onrowenter":3 |' e+ J; f$ _4 N1 S5 m case "onrowexit": 1 V1 B$ T2 \. U: V case "onrowsinserted": 7 K W. p# R1 `; T case "onstart": 9 @6 p3 X- t# D0 ?( l0 F3 G, w+ \7 K case "onscroll": 4 a$ u' t) l& b case "onbeforeeditfocus":9 W. y" f+ N6 c case "onactivate": 4 W9 ]) x. Z7 M- U/ V case "onbeforedeactivate":3 J( y+ B- R: A2 E" g- [ case "ondeactivate": 5 I ?# ~ ~3 ?) V3 l" K case "type": ; D1 t" q; U' q% Q, b' ? case "codebase": 1 c5 U: y4 ?3 ~" f1 [( W ret.objAttrs[args] = args[i+1]; 0 M2 Y0 f" M4 M1 u8 v/ C break;$ b/ p3 C6 L0 p% Q! M case "width":( c" r. `+ l; D9 k: g8 `6 v+ P4 }0 q case "height": . e% l4 q! x; j" [, V" e9 Z/ Y8 \ case "align": 8 l' E0 u' b1 h4 w case "vspace": ' Q+ e7 U3 Y* b! Z( ~5 U0 ` case "hspace": " |, @7 H& u4 z, K! X5 F! ?0 U case "class": T- `2 p5 `4 ~. p case "title": $ y& L) E# ~: E+ @ case "accesskey":9 U1 |2 P7 S2 u1 ], b' R" @6 r case "name": & _: t6 i. i ~2 N; L/ q case "id": ! L/ m2 `: p G- B. Z" E case "tabindex": 7 L! `& E8 e' O0 U/ T3 p ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1];% [& ^9 g1 {4 o break;) u5 b P q+ s2 z9 B; ^ default: ' j* S- R& f7 k) V( s ret.embedAttrs[args] = ret.params[args] = args[i+1]; + |9 D) g& i$ }; H }0 N' H$ H. k7 V! p# W }0 B, }7 y6 D) f, @4 T8 j$ K ret.objAttrs["classid"] = classid; 9 S y/ ]- {5 i3 _9 H, H if (mimeType) ret.embedAttrs["type"] = mimeType;6 _* U. ], V% v( \% k# U' h. p return ret; : M7 I, _7 p6 J$ Y# f& Z: V} ! [0 g$ g0 r* e' a& W+ w& w' ~ $ b4 B$ a9 {1 _+ e0 x7 l7 v. y$ @2、保存为:AC_RunActiveContent.js 5 N, N; I- E3 R9 c0 f3 P! o5 U) b$ s, g- u$ n! k/ x 3、在所需的页面中添加;- n( X2 K7 W& ]0 K ( r' \5 {6 o7 |/ t) a% k* t/ B <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>* k I; N) Z/ b& X' t; i / }$ b) q8 m# P, |* Y 4、在插入FLASH的位置添加: " E0 g% T/ t. j4 K+ P8 T% d 6 {# I, i) E5 n" q( @<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>/ n' C2 K8 u0 v <noscript> 2 W9 G2 U* \+ r, Y* 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"> 2 a7 t, z4 c! c$ e0 E% a/ U, L<param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">- T* O2 e8 a% G. f <param name="quality" value="high"> 0 F) j5 e" S: A$ @! q9 i- q<param name="wmode" value="transparent"> & r2 Z! N9 ^1 p# O/ P+ G/ x T( s<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> : s* j3 E5 [1 f! G</object>) a) u! P3 c9 o/ _( H# t/ w </noscript>; C! \( U+ U3 v- _' m7 K ! [8 B+ }- A6 O1 V- D" V 5、页面中的完整代码: 9 E/ }8 }: {( Q1 E* v- v ) Q9 O& W& R4 d<html>2 w- Y$ @0 X4 ~6 N6 M <head> 3 p7 R( W0 e2 N( a+ B2 q/ ]. |<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />' [$ ]1 V1 e: p8 [. n' I <title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> # L2 v2 ^" F4 _5 ?9 i$ r<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径-->/ k) Y" g9 U# P <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> 2 D7 A; M9 C$ j" ]# Y. F" A! c<style type="text/css">* t8 G, u, m1 h& N9 s5 ^6 Z1 T <!-- 2 D" u8 i: Y1 x. x3 ]. Abody { " g( c$ C5 G/ K5 q5 @: Q background-color: #CCCCCC;5 _9 B0 V0 I* { } 8 |9 A( `" a6 {7 y--> 5 Z$ f* O$ d9 R' U</style></head> $ h( F1 G3 ?6 a7 r2 g<body>; t: w2 i5 Q( y5 ~7 l- L & ^* R2 f7 m! ~$ V<!--下面这段JS修改的时候要注意,一共要修改四个地方: ( B- t Q0 P- e) M0 ^* f$ j300 是宽度;. Q' U% f) ?/ w, R. y) [ 200 是高度; : {' b7 N& S3 }2 O6 i4 u1 z4 r6 ximages/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->, U% L- s5 M$ Z$ _" q <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>6 }6 b8 I2 M6 N" t% {" Z <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。-->' x/ _1 Q5 J$ ~' O. r/ D: h# S+ Y <noscript># f- b; D- y A$ _3 f <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"> + T, e) N& Z# O/ v <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> - K1 q$ j9 ] c5 ~/ n <param name="quality" value="high"> 3 w* A( M* f; h. T& d$ w& ], I: G <param name="wmode" value="transparent"> - b6 s$ \7 g: @8 v6 U) c <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>3 b+ ~% m3 ~6 d1 Q5 @/ W6 [6 o </object>% R# i1 n; p; T& y& ]# M </noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!. Z# u6 b" C" A/ d9 n/ l0 i   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕!1 i% R( ?; h0 @! ?, S" S" |   终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能! 0 u; I% x" c& j8 @  不敢独享,先建一个JS文件,写入以下代码:7 r2 o$ x2 Y3 q* T; F1 y' d 4 c7 f2 i& k7 x! B0 r T
  1. function al(){$ }4 t' R7 y$ ?2 y$ y. ~3 e
  2. alert('ok'); 0 r" ]& e" _7 w3 J
  3. } ' F$ G; ^4 D( U" a
  4. function AC_AddExtension(src, ext) 2 [5 e! D2 l0 e4 H
  5. { n/ I+ X {3 A% T6 V& t
  6. if (src.indexOf('?') != -1) 2 {( \8 }. S: d( h
  7. return src.replace(/\?/, ext+'?'); & A4 ]: D; B/ t) N1 b
  8. else : a! F# ~8 ~. ~* d7 \" x& o
  9. return src + ext; 1 E0 u2 W, C- e) p6 |; e
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) 9 _. c" T; D% k3 {* r8 y, ~: V0 V
  11. { ' s* k& b5 r) c! `( b
  12. var str = '&lt;object ';6 b" C* ^' ]' b; S
  13. for (var i in objAttrs). k+ A3 p* c( ~8 L+ ~; J# o( F4 f
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';; l! I o. g+ e
  15. str += '&gt;';+ z1 l. K; f* { }8 O
  16. for (var i in params) ( z) Q: T I$ d/ N+ i
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; ' H( z% R. `) b9 c2 O3 C. J
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed '; : [0 l8 v. b: l, R& i# o% `# T
  19. for (var i in embedAttrs)1 k# Y- s6 \! _
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; $ x( W6 r( d8 k* M" \: P' [* O
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str);* t4 ]" G) e m6 v/ R2 m; |
  22. }function AC_FL_RunContent(){1 U! h2 J* T8 l5 K: \. p, q
  23. var ret = 0 u0 o0 u% f* E0 K- I& U
  24. AC_GetArgs0 H8 H& p3 @9 j$ Z. H& J8 F2 O& R
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;$ l( D( [. p; G" T& n" i' Y8 P1 s
  26. , &quot;application/x-shockwave-flash&quot;: c$ k) `4 e! V* u( x3 u' R
  27. );2 b! O8 B) ]5 `" w7 I1 U9 J
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); : A+ N' G- P/ n' J" c
  29. }function AC_SW_RunContent(){ " D$ d$ N2 `4 \/ Y: f
  30. var ret = ( d6 J/ H* H9 O& ^. X0 E
  31. AC_GetArgs$ v5 b" l4 p6 d3 D* |/ r/ V6 X2 B# I
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; W+ h+ }1 i; n) a
  33. , null# Z7 \1 B4 D J) D: m
  34. );# e) x( |9 }) U2 x3 g+ \5 `1 K* x
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);, e6 Y+ T3 V. q$ v
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){0 T* b4 S( O% s8 W
  37. var ret = new Object(); ' u7 l' m R! F5 W
  38. ret.embedAttrs = new Object();8 L: g' y: i0 F: ?
  39. ret.params = new Object(); $ o* P# \) X% ]0 n6 i
  40. ret.objAttrs = new Object();/ ]+ V0 l/ f5 n) K# j
  41. for (var i=0; i &lt; args.length; i=i+2){1 P1 G/ v: Z1 ~$ y: P
  42. var currArg = args[i].toLowerCase(); switch (currArg){ , N$ ^4 l, A9 Q
  43. case &quot;classid&quot;: $ w: l( n! S+ D8 D" g; B
  44. break;" b& ]8 e- @5 F- d) ?
  45. case &quot;pluginspage&quot;:# L& V" ]5 |: y7 r2 J1 B" h8 K
  46. ret.embedAttrs[args[i]] = args[i+1];0 s. f' H- ~8 W' L& X0 d
  47. break; . B* x9 s/ r2 i/ ]% a* s2 [
  48. case &quot;src&quot;: 4 A* E9 I3 {1 a: @
  49. case &quot;movie&quot;: 6 i, g' g( F( j
  50. args[i+1] = AC_AddExtension(args[i+1], ext);8 s, j! F! z. K4 W# W0 \
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1];' {& b2 \' P: L9 g) x
  52. ret.params[srcParamName] = args[i+1];) T5 U3 h `$ A9 ?. Q5 K. [+ o
  53. break; ) B% z) R) ?2 f3 c
  54. case &quot;onafterupdate&quot;:$ r1 K4 K) S9 p3 R8 ~/ ]0 l, Z
  55. case &quot;onbeforeupdate&quot;:1 R/ T$ p! Z4 N& i3 Y1 C
  56. case &quot;onblur&quot;:0 b; E# q4 D/ G3 ]$ M
  57. case &quot;oncellchange&quot;: ! f4 z p4 M, ^
  58. case &quot;onclick&quot;: ! x' m' k" @: G: t: Z
  59. case &quot;ondblClick&quot;:% p* F* k1 F1 I& @/ m, k
  60. case &quot;ondrag&quot;:! G' y% t$ y) z' U% Q- y8 ]
  61. case &quot;ondragend&quot;:- ^3 ~" V0 w8 a
  62. case &quot;ondragenter&quot;:! S7 G) ` \, G; p5 \- o( h8 ~
  63. case &quot;ondragleave&quot;:# g9 k n/ h) A+ p% G, }( _
  64. case &quot;ondragover&quot;: , K. @" P1 A8 O* N6 d4 e2 o: E: N
  65. case &quot;ondrop&quot;:3 Q: Q! Q8 [( D) x W+ P' u# M+ k+ U
  66. case &quot;onfinish&quot;:% V0 u9 E/ a3 \
  67. case &quot;onfocus&quot;: ! r8 _4 s( x1 }! w2 R
  68. case &quot;onhelp&quot;: 7 k" I. N% h# L6 O; y$ W7 A; S8 N) j
  69. case &quot;onmousedown&quot;: - |9 Z- z+ a' [( }
  70. case &quot;onmouseup&quot;: , |6 y% R+ L; |
  71. case &quot;onmouseover&quot;: 7 o' C. F: O2 @% u
  72. case &quot;onmousemove&quot;: ! _3 w- h& P2 h
  73. case &quot;onmouseout&quot;: - o8 L- k! m& p1 k& k" v: X& j
  74. case &quot;onkeypress&quot;:0 b) Y% |/ i3 M! {" i
  75. case &quot;onkeydown&quot;: 1 X* s9 a$ S% c" r2 f
  76. case &quot;onkeyup&quot;: ; E( ~3 l- ~9 x7 w. I
  77. case &quot;onload&quot;: ( z% M4 A) u) k! R
  78. case &quot;onlosecapture&quot;: * R; D1 u$ p; L4 [/ Q- {- ^
  79. case &quot;onpropertychange&quot;: . a: c! Z$ |+ ?& v% C. Z/ o" s
  80. case &quot;onreadystatechange&quot;:7 H5 a' f2 X7 P m8 M
  81. case &quot;onrowsdelete&quot;: % S6 P, s! U7 n1 L2 L
  82. case &quot;onrowenter&quot;:/ K" @) x1 z" |; u0 a4 @
  83. case &quot;onrowexit&quot;: 7 X% d# f3 g8 }8 D7 u: y9 z0 ~
  84. case &quot;onrowsinserted&quot;:/ I( G6 x8 {/ S" Y1 }" G9 ^8 x6 T
  85. case &quot;onstart&quot;: . h# O$ j. C2 l
  86. case &quot;onscroll&quot;:+ |0 D6 F. p! `' Q5 ^
  87. case &quot;onbeforeeditfocus&quot;: + Q9 E& e) i+ S8 H- ~0 y
  88. case &quot;onactivate&quot;:9 H2 R( S$ Q, Y9 r! j _9 B" V
  89. case &quot;onbeforedeactivate&quot;: ' V9 E! H! r# b+ x( X9 Y
  90. case &quot;ondeactivate&quot;: # ]+ x: F' m: I1 }/ U! b
  91. case &quot;type&quot;: 6 z z+ n1 E: G" S% N/ P/ S/ T
  92. case &quot;codebase&quot;:3 V1 G: E, t/ N' v- X5 z8 U( k
  93. ret.objAttrs[args[i]] = args[i+1];5 t/ i/ E' h( ~( y7 h$ h
  94. break;% P8 ?" N- m" Q. D9 L, D
  95. case &quot;width&quot;: 6 @+ V- l2 D3 I' G- G! D
  96. case &quot;height&quot;:! ?$ l: G. O# {" L0 |: I
  97. case &quot;align&quot;:/ C1 N2 g' R! m/ B4 D# \( P/ t
  98. case &quot;vspace&quot;: 4 k% O. I' Z; b @; K8 c& X2 l
  99. case &quot;hspace&quot;: 3 w$ L0 e3 V$ v' `0 a
  100. case &quot;class&quot;: : g, y T$ k1 q. i. p1 A( Q& b
  101. case &quot;title&quot;:. P% ~- K3 b4 Q& Q
  102. case &quot;accesskey&quot;: ; p$ e' i+ C+ r
  103. case &quot;name&quot;: - z6 {5 n) R4 k; e" W) q, S
  104. case &quot;id&quot;: , Z, e5 e: P, k$ C8 k0 M; ]$ c3 {2 {
  105. case &quot;tabindex&quot;:( A+ `: L$ F& X5 h# B
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];) v4 x+ H! N3 }: F* z- }! ?
  107. break;0 a8 f' {4 o4 m( ]" D* S
  108. default: ( A- U2 H1 [' R, ^" a* ^
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];( ]2 ~; j! n9 w/ Z$ U" r& f
  110. } : g: u6 J) g8 A( Q% H3 ?
  111. } $ `+ w/ L, R' ?& \4 L
  112. ret.objAttrs[&quot;classid&quot;] = classid; 7 i6 T4 @" l8 _& r
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;0 J( f+ O" A. C' v
  114. return ret;3 o. e9 ?- R4 a+ t) T3 f2 ~1 K
  115. }1 [$ U8 j0 A' T
  116.   
复制代码
& E1 b: Q( M9 k" w+ i 然后在要实现这个功能的页面上,调用这个JS:" |. t8 D: M$ w) ?' @ # P7 K7 v a0 i# X: } t2 T) P9 ~
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
   , q) |. L, Q8 V6 p& q3 U7 D( h! T( Y& @" \ 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:/ v/ Q* Z. t6 F ' N8 v3 @2 k0 [. u4 J4 X' k' w
  1. &lt;script type=&quot;text/javascript&quot;&gt;% G& k) ?$ G6 q5 v! q( j1 |! M
  2. AC_FL_RunContent( ! J% `4 c" k6 t9 k
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' & y5 o' w; N! h1 l( P
  4. ,'width','524' //FLASH文件的宽 8 Z; G9 M- K5 G2 A
  5. ,'height','55' //FLASH文件的高$ ]5 g$ y: s( }- n
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf9 \. c; q! V4 k
  7. ,'quality','high' //FLASH文件的默认质量 4 U- r& W9 I. a! | z
  8. ,'pluginspage'% V# \( D0 X( j% \' t" ?) D
  9. ,'http://www.macromedia.com/go/getflashplayer'5 [! x1 a: ~% |3 v
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样: b5 x- M3 ?6 x
  11. );% G& S& a# ~" v \+ b4 M. V1 K: z
  12. &lt;/script&gt;% }" K' ?& S% U$ k2 Z) H3 {5 r
  13.   
复制代码
大家快去试试咯~!
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

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

objectSwap.rar

2.29 KB, 下载次数: 0

rar

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-7-8 08:41

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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