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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。 5 W9 V2 q, l; A2 ^0 B$ L2 H3 p ; S5 T; c t2 K# ]/ v最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。( a5 _- u8 V/ e' j- S# q, K- L $ L2 t6 G: I0 O今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: ! w' {8 k N# S8 r M5 |; m3 x! J! l7 ^6 A1 a 新浪 (www.sina.com.cn); x1 g, P, 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; ! q7 o3 b) r% y. [& r y4 N
  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;);' T4 N; @2 g( y& E6 w5 f! V
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); , Q/ F9 V& g. Q9 C
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); ) Y1 }+ o/ b, y5 C* ]) L: P: p+ |
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。 . o, q1 n; `' W D. Q1 M ; C/ J+ @- X4 f/ s新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 9 _& i% w3 w6 @' Z: {8 ?2 k) A% i8 h 搜狐 (www.sohu.com). R2 n5 Q# I4 }$ ] 搜狐的手段和新浪如出一辙,首先加载: I% Y, [ h" S2 Q$ C4 l# ^2 s$ \# ^' t/ [: R T0 @ <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script> ' V! z7 O2 y& d. {% N. `) ?调用:
  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;); y2 r' }7 h+ y
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;);' V7 |. H8 _% z& D( i
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;); - v( |" `$ f8 T/ j, e7 o% r* P6 ~
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);$ D9 z! J; I. }7 _' s5 f$ g. m9 {
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。6 H J& g4 \8 Z- f [2 ]0 a- O7 X5 e2 X) s4 u9 g 你说是搜狐抄的新浪,还是新浪抄的搜狐? 9 E$ J H# O$ {/ q0 t $ Y! C7 d5 ]- Y) y' g- m! D网易 (www.163.com)- J/ B; d" U' `) [' n) f: J, A# j 网易就是不一样,处理手段显得很有技术性。首先加载脚本: T% M! N7 r, |( z 4 _+ h" _" C4 q1 o, h# l- d% } <script src="/DartRichMedia_1_03.js"></script> . t4 p9 ~7 e f: X2 g页面上直接用 docuemnt.write 写入 Flash 的HTML代码。 \0 s; r: O: k( s ( \/ I2 V# w& ^0 W按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) {& E* o- o( L6 I; I; J% }1 f3 G0 S
  2. dclk_isDartRichMediaLoaded = true;' m. ~0 E- ^2 F& h! ?3 v2 [9 J4 o
  3. function dclkWrite(str){ 2 A! ?. p# @8 ~' g* Z6 W2 {
  4. if(dclk_shouldOverride) { 4 |+ w4 }3 o( |
  5. dclk_original_documentWrite(str); ( P8 q' }) L2 {) k( _
  6. } , a; o: d7 P K/ s5 v3 E9 j1 |. e
  7. else{ ( T& G* c& p/ v8 ?5 P
  8. document.write(str);% i" D& m+ l8 U; f3 ^. T/ M) T- A
  9. }$ ^: O& W; \8 i( B
  10. }* _4 K% G$ r5 f1 `+ Q5 {4 X& y9 R
  11. function dclkWriteln(str){; T0 D7 X# [" U( L; ?8 j
  12. if(dclk_shouldOverride) { 0 M. R0 B- D: z. N+ o/ C4 f& j
  13. dclk_original_documentWriteLn(str);' p/ r6 ~8 [3 L) Y, D \: z7 ~
  14. }& f/ B( b0 }7 m/ ~2 ?
  15. else{2 X# y K: ^ ]/ Q8 ^
  16. document.writeln(str);8 L1 a! @6 F$ A% @6 ]. |
  17. } & K6 S7 Y$ j9 J% K a' ^4 x
  18. } 5 i' ]$ S9 E* ~) D7 l$ R
  19. function dclk_isInternetExplorer() { 8 M( f) Y* o8 O! ^5 q$ Z
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); R( B( }- B5 @8 u% `+ f
  21. } 8 G8 [$ d I( {7 x' a8 y" u3 B
  22. dclk_shouldOverride = dclk_isInternetExplorer();* t! T8 [9 n( N" I
  23. if(dclk_shouldOverride) {( ]2 i2 S7 R# f+ c
  24. dclk_original_documentWrite = document.write;8 k4 ~$ N; Z( O: k- B: _
  25. dclk_original_documentWriteLn = document.writeln;- R6 ~: D/ ^7 ] m8 o; s8 A! o; G
  26. document.write = dclkWrite;8 S1 o# D/ v, a6 m7 O. K
  27. document.writeln = dclkWriteln;) a- R. c! b/ p4 ]5 M% L8 H
  28. } * X! H) i. `# Z3 T h
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 ! t# H$ p0 h) O" X2 e 2 Z+ H: a7 n8 z! ^& f D雅虎中国 (cn.yahoo.com) " P0 ^% ^& R* y! Q eYahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 , l6 \2 G! h7 e; _) X# S9 ]2 @9 r' l( }* v) i 腾讯 (www.qq.com)( D8 \: ?6 K" X 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。 + j: s# S2 y& L: X " y3 i4 u; Q1 p" B2 d% j& ? ( z5 \' ], ?) O% O+ p% w: L' P! U b/ q1 Q( T; r* a" v & y9 F d% e% R. C/ U 稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 - D' T+ o& n; y& }" e - h1 a, ]) i1 J( X; p6 i使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 ' Y. ~) |: F6 F6 d2 E1 O# E/ V2 W" R% v! v% J9 b 网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: / g: v" m- P9 S6 l- s' I4 h, Q* L: T% R; g( f6 y+ E //只要在 </body> 后面加上一行 / U. M! n. W7 b <script src="javascript:'document.body.innerHTML+=''';"></script> 6 b0 t2 ^3 U( e1 `* H1 N& {- P" T真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。; [% \0 A& c/ R6 H7 @ 7 |" Z; s0 f3 I7 `& ?) X3 C; d2 ^我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。* V6 R$ `* Q* G1 B) y. X4 ~4 q. _" J $ g% W# T( [' q* c% }. n 网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。& m: d m6 j3 P4 T6 ]/ n# D 8 |2 D3 u/ c, R0 m/ I可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。! y" w# U) C/ ~! B8 A 1 t" ?, ^( ~ O% D一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。4 N) N4 k+ Y9 h. X# k: q5 L! D& x9 v : T0 H4 a/ S- UObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。 * t, B- h" T* c9 [8 Q1 S9 K$ Q' B2 k9 M* w( o 最新的ObjectWrap 可以从这里下载。 9 X9 `2 Y; Q. S2 o' Z * H% A! F/ Z1 _/ p8 {# J% i9 W原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。) i, S" ?5 t3 F2 ?# u* u) X 0 {0 v9 v2 V" q至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。% ^- k. t7 q: ^# C3 Y) F$ d ) b4 T- w$ Q+ R" V# v& v6 F j最后向ObjectWrap的作者 Karina Steffens 致敬! / U7 X) w3 G3 r5 i6 W' l 4 c1 {5 U) `; t1 S* x, [6 Dhttp://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。/ H0 P, y w: O& M8 Y a 2 g. J+ a, Y a% \: Q' `当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: ! s/ W2 ?& T$ |- Q% M- o7 e* M) d: u4 o3 @3 H& C 1、新建JS文件: ; ~3 ~) J& E' L9 t. R8 k- Y # l) c5 q: r: p2 ~//v1.0 7 Y, `, k7 K! p4 P' g//Copyright 2006 Adobe Systems, Inc. All rights reserved.& K4 S |4 J- j, D function AC_AddExtension(src, ext): W0 _+ d5 ?3 K. b8 C% @3 K& ? { * X) K( S% Q2 q- t7 C) u2 _ if (src.indexOf('?') != -1) % ?% P/ k) S8 m return src.replace(/\?/, ext+'?'); 4 i: e l9 M. H' x; ~! z* ~ else g9 B0 Z; h% W) V5 R0 t7 D return src + ext;: ]$ [# j/ f% j8 k I }' X" K5 J W: g g9 c - S. l, l/ E" P5 ffunction AC_Generateobj(objAttrs, params, embedAttrs) - I4 `- c- I& a. z { ( O) H% w! k X4 _/ X# P" U$ _ var str = '<object ';5 \2 k/ {/ U0 P& m% N' E, \! z. r8 T5 u for (var i in objAttrs)% ~% g) E6 _ v- X str += i + '="' + objAttrs + '" '; ) w g5 \( G5 q I# ^: X% J str += '>';0 ^0 w+ T' F% e: u# n9 C for (var i in params) ) g6 I6 X2 G5 y1 g str += '<param name="' + i + '" value="' + params + '" /> '; . @7 [0 ~6 N* A str += '<embed '; 5 ^: t3 c7 X' q; ^1 E for (var i in embedAttrs) 6 G! M; H+ L5 s str += i + '="' + embedAttrs + '" '; ( n, p i; p- T3 c) E* k str += ' ></embed></object>'; / S6 z; W4 t$ G" k$ ]8 N8 G0 J5 x* _! m0 } document.write(str); ( u7 W3 Z5 a: K% h4 O& F} , N7 y( B1 b1 T7 I" \. \+ I0 D8 n6 o function AC_FL_RunContent(){ E: Z1 c6 ], S var ret = ( c" [; o* j9 D$ l- L( I( H2 E AC_GetArgs }' y# t' w) V ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" % X8 V$ ^- b7 Z% x! g! } , "application/x-shockwave-flash"3 N" ?& S' U- N ); 8 a4 e8 t j1 B8 o7 m4 s" D, ^, C AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);3 Y7 I1 K0 c3 r9 l" ] } 4 g; Q+ o4 ^- L! z3 B5 _( \; J7 D% ^2 a; j; u- p5 [ function AC_SW_RunContent(){ 4 R" G7 \" W: c% u) k/ E6 k9 W- H1 | var ret = 4 O, o0 r4 E. H. V" ~. ^3 D- e AC_GetArgs; H/ k' e7 d1 O: K5 ?" Z) |2 k ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" S3 [% u0 v( d9 Y0 ~) f. ?( d. p , null . }; S! w) \* ?. n* J );. q3 {2 n: |9 v& Z* K' h% D AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);+ g! ~, b2 {( f% U2 _, \7 H% @* L( ] } ; O; ?! z$ ]9 E, ~ 8 U7 f1 M' S! ~5 l) Q+ u% {function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ ; n* _1 z) ~( J z3 w4 q5 H var ret = new Object(); ' j* ~3 r* ]! K, [ ret.embedAttrs = new Object(); ! X' [* |1 J# e! B3 a# \! O! `0 N ret.params = new Object();& F+ ?" f' C" k. T ret.objAttrs = new Object();$ f# K! I+ m2 }, b- w7 U for (var i=0; i < args.length; i=i+2){ . W1 a+ }2 j# y# t var currArg = args.toLowerCase(); * H" a J5 Z0 k; ~7 \: u ( B9 w, V6 {1 a* F, M3 C0 {8 B switch (currArg){ ! v: L8 U4 h6 L! B9 d% y case "classid":, U& t# j4 R( a1 H# x# X break; # ?6 V) a _) ?6 m* t2 c case "pluginspage": k) Z7 d& N& b% B' `3 O ret.embedAttrs[args] = args[i+1]; ' C, a' n: y& M1 @! Z break;9 _& u4 j w$ c7 u case "src":7 d3 j4 h- \& Q5 v4 K' V case "movie": 6 \9 r- V' i! B q% ?! K args[i+1] = AC_AddExtension(args[i+1], ext); / _& k6 Q/ [, B; s5 _- J4 N9 u ret.embedAttrs["src"] = args[i+1];, l8 k- |/ f, H. }5 X B1 _/ v ret.params[srcParamName] = args[i+1]; * X% _; _, `, G1 o2 P break; + M, e6 r8 ]6 _2 R/ o0 D" f case "onafterupdate": ( X4 l) [' T# y. L case "onbeforeupdate":9 x3 p$ B' v( a% ? case "onblur": ; P% n' L/ u9 R0 r+ b# E5 C$ O case "oncellchange":. K7 {$ z7 ~1 [ m case "onclick":" v2 M; C9 p% r' @8 ?. d! } case "ondblClick": q- s/ D; G/ h4 G4 B$ x0 b$ r& E case "ondrag": % L1 N5 _) o9 j$ @7 H( ] case "ondragend": 0 _: G4 N- e3 M" L case "ondragenter":, h( {; m: J3 }2 R$ C5 N case "ondragleave":7 _0 A7 l3 Z) E- M& y case "ondragover": S2 H- e0 U: L8 t5 @ case "ondrop":! a( l7 ?: e$ a0 m* l case "onfinish": 6 C) i" N6 p. y A6 G case "onfocus": + q4 O) r" N1 d Y0 s) e+ N$ e+ i case "onhelp":: V0 y6 h5 A0 y9 i. l3 W0 D4 x case "onmousedown": . w. l% X/ Q" g case "onmouseup":( e/ ` J+ x* u5 S case "onmouseover": 3 F- ^& C! t+ y case "onmousemove":$ Q) q0 h3 i( B7 ? case "onmouseout": 1 y- n6 K) t6 ?+ |- d. ~! Z case "onkeypress": . b$ R Q3 e7 J& ~2 } case "onkeydown": / @9 I+ q" h$ ~- @2 C: D1 l case "onkeyup":8 H" I( |2 V8 _; T case "onload": / A) u7 U$ Z3 Z2 n% y: I; o* q( l+ } case "onlosecapture": L: }6 ^5 U7 k* a$ M: o case "onpropertychange": + e* V+ I+ _" N6 u% H% q; v% E case "onreadystatechange":% o# f) z( |" h- e3 Z# |. j case "onrowsdelete": 0 r( M7 \' }. j0 Q e' e4 b0 L! G case "onrowenter": x$ e* V% V3 v& k' z7 F9 N case "onrowexit": . H8 t! U6 z7 l% Q, } case "onrowsinserted": % _. {! X/ V7 K case "onstart":, H. Y; N; o# R9 y5 F! V. v case "onscroll": + _! u, X& P$ o& ^5 a3 W' r! S case "onbeforeeditfocus": ) e+ O+ R1 C, t case "onactivate": 3 F4 h( v7 M$ u) M case "onbeforedeactivate":" o9 x5 R; I: v4 F9 O; l% O5 L4 K4 g case "ondeactivate": 1 F+ x0 I3 q0 f( J6 \! f case "type": 2 _1 v6 G5 H% h7 M" |3 Z+ X case "codebase": - ~3 {% z5 F0 m ret.objAttrs[args] = args[i+1];+ f: Y; ^, U4 y, Z6 D8 y break;4 B* ^$ ^" Q3 B; J5 B! I- r case "width": 3 @3 |) q, q1 C% _; D case "height": 5 s/ S8 m( e3 c3 o! ^; j case "align":6 ~2 q2 z: @* b% C1 P case "vspace": % ]1 f4 a4 N; C( w- j, [) c+ a case "hspace":2 T3 e$ S& D' ]% d case "class":- n0 n0 r- O5 U9 e case "title": % y0 s2 |+ V- X/ q9 n case "accesskey": , X. c7 j' C* ]) C3 x5 U case "name":7 d" q; G/ Q x2 d. W: S0 V case "id":+ O |' B% J* T9 V( i case "tabindex": 3 Z4 Y9 I' Y3 Z; T$ U ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; : J& s1 o. ?% ~# Q9 c9 b8 i# i break;, E2 ~/ [* C/ H9 [! e default:7 {% A( s8 Q$ F6 V9 W5 G0 ~1 f0 o6 T$ [ ret.embedAttrs[args] = ret.params[args] = args[i+1];* T* J4 v7 Y1 _* F& ~3 ? } - J: U5 R9 [8 n% i) d }: N/ k$ w2 u2 u ret.objAttrs["classid"] = classid; ! A, P8 V- f+ |2 g* Y- A if (mimeType) ret.embedAttrs["type"] = mimeType; 9 B+ C; w r2 { return ret; 2 s. [. H8 o) p1 ^} ( m+ C8 c. V# x5 Z% R. d7 D5 h+ W! C. b 2、保存为:AC_RunActiveContent.js+ C, D2 h# }4 a$ j% Q% \' @ 6 ]& I3 f7 X' e' Q5 H& e- q3、在所需的页面中添加; / d7 H# I5 B1 W/ } K) ^& y 8 L4 i s9 R$ S; |* r<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>% {1 x* ?+ l& W9 k2 T; ~3 S# K3 y; D " ]0 ~1 _+ ?3 C. c) F4、在插入FLASH的位置添加: * X1 M+ d/ i. l9 [: a* v& |# P 3 s0 L; D% E# r4 k<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>5 Q8 g5 b9 ]. |$ Q t6 P! n4 ` <noscript>$ S6 S5 ]' c. c! s, x <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"> / Q' g: Z$ a8 y9 F& j% S$ U<param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf"> e8 Y# P; b7 |. m<param name="quality" value="high"> 6 ? a" E Y. L! p! G<param name="wmode" value="transparent">1 t: C! U; [" k$ `; Q <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>2 D0 O0 m% G3 g9 a </object>* N; j, C+ r( ?. Q/ r </noscript> + t& H; C3 I) s- }0 t, h - P- p7 e& [. Q) ^5、页面中的完整代码: 8 t7 a) Q4 ]* R$ P) d9 m7 N% V, i8 U5 ]8 @6 U+ G& q0 I* q <html> " v5 F# v7 z6 q+ @: V. O<head> + u7 y2 G5 Y+ z% q b5 l6 b<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> % ?9 x4 f5 t3 v- H3 {3 b7 Y6 |+ V<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> + `. @$ W! W/ ]& F }" W4 ?<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径-->6 \1 L( M+ P ^9 P+ p( @ <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> ' w' _2 a& c4 b! M; C) Q<style type="text/css">) Z3 V# @8 h x" p- q/ l7 b <!--0 B6 n$ B* f, }+ s body {8 p: H! U: f& u; A/ b" C background-color: #CCCCCC; + _# ?. J. x% j- y/ P} * I6 J; C$ m" I6 K! Y5 [" }-->7 B8 T$ L5 ?" q, F </style></head> 2 M3 S, s! y7 M7 o/ I* D' R3 w. [<body> " ^: {% x9 N! R% [4 C. [ , G! Q4 `3 g9 V( q* `<!--下面这段JS修改的时候要注意,一共要修改四个地方: 1 z& f% T# L) ^, \300 是宽度;+ i( S% h% L/ ?9 A. ], \. _ 200 是高度; 2 L3 E5 }4 z9 L {+ \; aimages/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中--># {! [3 {5 e0 @ <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> - U- B- d8 F8 ^: u, l* o: w<!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。--># D5 o! z0 Z% Y% A <noscript>; I+ Y( F; |) L6 i2 x0 y <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">5 ]- G, d( ?9 T/ H <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> 9 v$ c8 o& ?2 _ <param name="quality" value="high"> 1 H8 c, m' ^; D+ Y8 P# E0 N3 Z0 l <param name="wmode" value="transparent"> * W0 y$ z0 W. S8 Y) ?) @( ? <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> , ^ ]! d' G& I* z. d& C</object> 4 W. _* @/ K+ A! S7 k</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!5 g4 [, k) n9 g% J& Q+ ?   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! 3 N. W/ M4 b: ~" t& b T0 ~! g  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!- O% i' O' C) w$ k   不敢独享,先建一个JS文件,写入以下代码:- m# n& C: S l3 { # x) L1 W9 q/ y
  1. function al(){( J+ u0 S/ J3 \; L b& s
  2. alert('ok');+ \8 L4 n! _8 D5 V7 T
  3. }1 ?9 ~) Z6 L% ?. o0 q d$ e
  4. function AC_AddExtension(src, ext)1 w9 `- a" ] S$ {
  5. {! o6 I! U' M5 U" v! f
  6. if (src.indexOf('?') != -1) ( T' a+ h; w7 r$ _. i, Y
  7. return src.replace(/\?/, ext+'?'); 1 d$ g7 I7 v- H9 d( K0 E4 N
  8. else2 }% Z( m" U H5 S6 o
  9. return src + ext; 3 f" R, C1 q* K( U( ?2 a
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) $ p0 x0 v. K2 d2 L! Z( F6 [1 E! G
  11. { 1 J4 Q6 y; p! r5 B0 m; P/ o
  12. var str = '&lt;object '; - Z }8 g# D; V4 {$ w$ u, t
  13. for (var i in objAttrs) - i, g) J0 d y s6 X! @' K A
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; '; * i6 g# _& j- [& ~
  15. str += '&gt;'; % u7 \" g) b, I, v) }/ S# Q9 L
  16. for (var i in params)9 G7 S3 ~% x# w9 X( X0 ~* j4 ?, t
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; 5 ?) @2 h9 M& y4 l! U6 Q' X/ |! q
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed ';/ A: @$ d& @. g- ?' o
  19. for (var i in embedAttrs) 3 q( H2 }* n; t4 ]& f$ C5 O
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; 3 m4 Y6 I7 ]- ~; u& y6 _: v0 k7 O
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str);. |8 N: D; R& _. D
  22. }function AC_FL_RunContent(){" g" Z8 s. |) ^" ^
  23. var ret = 3 n( R f2 N- H1 N: P9 E
  24. AC_GetArgs $ D8 O' ~) R+ R6 x0 q# s
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; 1 G j" c% L$ c# i. Q+ n/ ], q
  26. , &quot;application/x-shockwave-flash&quot; & t/ u9 z# }$ i" u7 e3 I8 n5 J5 d
  27. ); : D) j. l. @" x
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);4 o3 v5 z) i- p K* x
  29. }function AC_SW_RunContent(){ " V- ^2 V T+ d+ R$ O* ~5 Y
  30. var ret = $ ~ ?8 p( V. U- V& L
  31. AC_GetArgs, a) H) V+ l( J4 b& h/ U- d; D
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; , Q* j/ M( x% H" R8 T$ O% Q
  33. , null ! i E$ Y# V% }8 D' \
  34. ); Z# L# c5 Y4 t+ C5 f
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); ) i% b1 o# G) M# Y6 v, ]+ w
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){2 J! U2 i; O3 u" |9 |' [1 e' }% h! j
  37. var ret = new Object(); 1 B) E* R8 f$ z2 J; C/ F6 w4 O2 C
  38. ret.embedAttrs = new Object(); # {- n7 g& V9 O! Z
  39. ret.params = new Object(); + F J5 q. P% O6 o& b6 P' F: k9 v+ d
  40. ret.objAttrs = new Object(); $ v$ D5 Y, k" P+ p+ R. n! x
  41. for (var i=0; i &lt; args.length; i=i+2){; N1 A3 ]- }8 z( x4 M* E
  42. var currArg = args[i].toLowerCase(); switch (currArg){ 9 I( H6 B$ L# Y9 p( j" M
  43. case &quot;classid&quot;:! _( g- g6 q1 j' s+ q
  44. break;! T) \: S0 O g$ j) y D, L
  45. case &quot;pluginspage&quot;:5 K, K$ ~* k5 P; E- S' b; J; |
  46. ret.embedAttrs[args[i]] = args[i+1]; " |) o$ O) j/ `: l/ Z2 M
  47. break;% H1 M2 l# p# u8 X
  48. case &quot;src&quot;:* c3 k- l8 G7 n5 d
  49. case &quot;movie&quot;: ; P8 B8 j6 P3 m: u) r
  50. args[i+1] = AC_AddExtension(args[i+1], ext); $ k2 e# X" h" K5 _% d
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1];& A5 r! ^0 |/ q
  52. ret.params[srcParamName] = args[i+1];5 F& I4 `& E/ y% i+ e1 R `
  53. break;2 p* q* O0 o. b1 G; o1 {% L
  54. case &quot;onafterupdate&quot;:) ?& w: F7 n% D( J( r
  55. case &quot;onbeforeupdate&quot;: 0 I2 ]+ ?3 k- H& @
  56. case &quot;onblur&quot;:# N9 F3 `. u e
  57. case &quot;oncellchange&quot;: ( {; L. \/ @9 P' E
  58. case &quot;onclick&quot;:4 L/ p/ x `" h) W1 G
  59. case &quot;ondblClick&quot;:1 m( O* \+ `" g& {& _
  60. case &quot;ondrag&quot;: : k8 w' }3 L! z) P
  61. case &quot;ondragend&quot;: 4 @$ K4 q8 h7 P U: S5 C8 y
  62. case &quot;ondragenter&quot;:; p5 L7 I! t; g% |
  63. case &quot;ondragleave&quot;:/ l% c: O, _, r4 C% l8 s
  64. case &quot;ondragover&quot;:7 v3 E4 p/ F9 o3 }5 a
  65. case &quot;ondrop&quot;: + V9 Q3 }5 {3 D
  66. case &quot;onfinish&quot;:* D/ V) F( }+ r+ t' K
  67. case &quot;onfocus&quot;: : e: S# s0 A& {
  68. case &quot;onhelp&quot;:( |1 j2 G4 _2 g
  69. case &quot;onmousedown&quot;:6 l( V! l: d1 Y9 V
  70. case &quot;onmouseup&quot;: 0 h" _) v: V/ k2 F+ X& I; p) ^: Z
  71. case &quot;onmouseover&quot;: # `' L2 p, Q1 ?; o
  72. case &quot;onmousemove&quot;: 9 M" @; @: n" J1 O7 n6 W
  73. case &quot;onmouseout&quot;: . U/ g4 D7 F4 G" g9 n/ n
  74. case &quot;onkeypress&quot;: , [0 V: d) y; w7 J
  75. case &quot;onkeydown&quot;:- R$ W+ \# p% N& h
  76. case &quot;onkeyup&quot;:. \4 I! Q/ o6 B5 M7 i
  77. case &quot;onload&quot;: ' S; L% w* e4 C4 w E5 o
  78. case &quot;onlosecapture&quot;:' v; b. R- A0 w. Q0 n
  79. case &quot;onpropertychange&quot;: ! a- \7 G+ U, W0 u" v" R! z7 y
  80. case &quot;onreadystatechange&quot;:; t. n9 [8 F- b; w- Q" K
  81. case &quot;onrowsdelete&quot;:7 V2 l( ?7 a. Y$ a2 H; H
  82. case &quot;onrowenter&quot;: : n4 h; P U7 V. [5 P" g* i
  83. case &quot;onrowexit&quot;:9 E4 \# u5 k% A3 }' D& }* _0 c& x
  84. case &quot;onrowsinserted&quot;:% V1 }" h9 M6 ^1 a$ h' m9 c1 m# Q
  85. case &quot;onstart&quot;:: t+ m8 M8 ~# k9 `" d1 O# f
  86. case &quot;onscroll&quot;: ( T7 Q8 p% E/ s7 J6 t
  87. case &quot;onbeforeeditfocus&quot;:6 ~ l0 `$ ~' x, F1 O
  88. case &quot;onactivate&quot;:* u' O1 n9 E4 y4 D9 e
  89. case &quot;onbeforedeactivate&quot;: ! b5 T& W0 M1 v8 N$ `) Q
  90. case &quot;ondeactivate&quot;:, g3 T0 d* H( q! I
  91. case &quot;type&quot;: 4 x4 ^* c6 ?; @$ j4 b0 f* a9 d( y2 u) A
  92. case &quot;codebase&quot;: & U' j0 b- I( y. e* z! V
  93. ret.objAttrs[args[i]] = args[i+1]; 3 W# g) J% q/ I( @
  94. break; q* ~ V( W1 M
  95. case &quot;width&quot;:* }! j* x+ j) v
  96. case &quot;height&quot;:7 u0 E( K# { Z, T9 P4 i
  97. case &quot;align&quot;:( m. S X- S. P' V5 I+ |# _
  98. case &quot;vspace&quot;: 2 c! g0 r1 D8 y4 I( `; L& k
  99. case &quot;hspace&quot;: 4 H+ z W% R" K, I7 s3 h; W( S2 Q
  100. case &quot;class&quot;:$ V7 Q1 P5 P+ Z1 r0 k
  101. case &quot;title&quot;:; M, u% j' f9 _! j. e
  102. case &quot;accesskey&quot;:4 Q9 b7 n' K7 w6 r# n& O+ b& n
  103. case &quot;name&quot;:+ n6 k" p% z1 o7 ~
  104. case &quot;id&quot;:0 _ Z. ~2 @/ s: }" c
  105. case &quot;tabindex&quot;:* _4 P# v% D$ m+ i& Z! `' m
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1]; 4 O& Z( \( r+ y9 j3 ]( T7 N
  107. break; 8 \* X: A0 o6 Z. ?" P5 O
  108. default:# X" Y: Q% C! x) L( D2 H0 t0 N
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1]; ! c2 i3 ]( P0 Q6 N1 q
  110. }+ w) N$ N% p8 L8 F
  111. }) Y- p, g8 H) d1 x
  112. ret.objAttrs[&quot;classid&quot;] = classid; + I- b4 I7 Y" c j8 ?6 u2 Q
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;. k5 R `3 F D4 l7 g) H0 u3 x
  114. return ret;( l1 Q8 X5 X3 F5 A( v8 {' ^7 f/ W
  115. }8 t: n# Y* |7 v! a" X6 ~, [$ D
  116.   
复制代码
Y4 Y6 D% m, N" ^然后在要实现这个功能的页面上,调用这个JS:2 y/ c- z* M3 V( G- U* S . m, N; x2 R; A/ X$ Z
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  * c& C X) [/ i, F7 E/ b5 e! O 2 a' @( h% u( M0 f7 u% C. e* }1 |! X, ] 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:* w& e: I9 X( i* O: T8 E 6 n- k9 F9 k. P4 @
  1. &lt;script type=&quot;text/javascript&quot;&gt; 9 H- s* d6 K6 d7 R# _4 _0 q
  2. AC_FL_RunContent( % r4 z O- Y9 a
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0'; t4 |) G7 P2 |
  4. ,'width','524' //FLASH文件的宽 1 x' Q/ H8 L7 v8 S$ C9 C
  5. ,'height','55' //FLASH文件的高 # ^' `5 l+ Q9 V9 W9 C
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf 5 E" e0 \, d4 H5 x3 U; M' @
  7. ,'quality','high' //FLASH文件的默认质量' w' E" A& k; H5 s' [- r
  8. ,'pluginspage'# ]. ]( K% L# m
  9. ,'http://www.macromedia.com/go/getflashplayer' / ?8 Z) f, i- O$ N0 c3 G" J
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样/ o+ O: l. s! l3 S# R4 X9 j- s* |
  11. ); . _: c! \+ V% e: @( G' k
  12. &lt;/script&gt;4 r3 | J' @" 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折上云

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

GMT+8, 2025-5-15 12:48

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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