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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。 & L+ r% C0 C7 G, ?; ~$ Z* q1 F6 e 最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。& O! a: g0 o6 X3 |- O ! @% a& g e& E. ]- R5 O. t, N 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: % Z; j7 g! h7 C- |2 p/ t7 ~+ a! l: I e7 m$ p- L/ Y 新浪 (www.sina.com.cn) ! Q+ k9 R4 l& L首先在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;0 `0 v0 l0 c6 T( G: H
  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;);+ m8 a P9 B2 ~
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); + B' F6 F5 b# _# C( u! B. p& ]
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); 1 V0 k9 [4 N2 d. ]: e0 o- ]/ f
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。* G4 U" k+ c y% a4 N 9 Y! [+ E. Z' @2 _! D1 Z I新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 . X* L8 p0 h& E; T0 r8 |, _ 5 E* c+ s! T( I# H 搜狐 (www.sohu.com) + ^0 o8 X4 b0 r; Z7 q9 ?7 k搜狐的手段和新浪如出一辙,首先加载: 4 Q3 R* D4 c7 D6 r / Z% t6 G9 m+ ~# M <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script> 3 n6 Z/ z. y% L2 Y$ h: 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;); % s, b/ l" S6 v" U& [8 i" v
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;); 9 J" M1 ?& t6 \8 K& [
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);" L$ |0 P8 z$ r6 u% ?# W" V; `
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);" D3 r# |4 G6 G7 P
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。3 Y% j) C' }! k# z {& V% z 5 V. M$ l5 K0 J$ W# ?1 p 你说是搜狐抄的新浪,还是新浪抄的搜狐? / j- Z, {# U8 z9 [4 w2 C. J) d" o ' K1 l. s$ }- m* n) _网易 (www.163.com)/ c5 E5 q( S$ |3 p* H+ e 网易就是不一样,处理手段显得很有技术性。首先加载脚本: 0 H+ `6 n. z5 x+ v 3 e5 r# ? ~0 c! o! }" l+ {<script src="/DartRichMedia_1_03.js"></script>9 {3 o* ~- i+ r" u1 W 页面上直接用 docuemnt.write 写入 Flash 的HTML代码。! \: r, |+ v: \" u 9 U- w8 D' q- {" U按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) {# m, L3 C: o! Q/ V4 u1 Z# ]
  2. dclk_isDartRichMediaLoaded = true; - A3 v1 I+ h g' F/ [: k5 a& [
  3. function dclkWrite(str){7 p1 k- j/ Y: _3 {
  4. if(dclk_shouldOverride) { 0 k5 |6 O0 k# \8 {' [
  5. dclk_original_documentWrite(str); 6 k8 ~( @3 B5 t+ U2 p8 Q5 d/ z
  6. }! M' e; Q" X( C
  7. else{ # _& \ ^( e6 h( s
  8. document.write(str);4 C' N9 r5 ] K' B1 Y4 z1 O
  9. } ( Y" {# ?( Q- g
  10. }6 K8 l% T6 I, @0 k
  11. function dclkWriteln(str){/ {# V; P& A9 F; |7 J$ x$ b
  12. if(dclk_shouldOverride) { g0 X- I, [9 y: ^7 I, H
  13. dclk_original_documentWriteLn(str);" u4 z/ T& a8 {8 U. K0 @+ B
  14. } 1 |1 D3 @2 Y1 u* ]1 O! H
  15. else{ 6 H. w" _( L9 R1 m, Y, r
  16. document.writeln(str);/ r% J4 V# y9 n$ k
  17. }7 d4 ^& ^; ]7 Q8 { h
  18. }/ u' e: ?; s: p' l3 \' @
  19. function dclk_isInternetExplorer() { 7 t' ?( G0 O0 U
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0);5 `; B0 h1 M' z
  21. } * M% g# T! C- t: r' S
  22. dclk_shouldOverride = dclk_isInternetExplorer(); O" G' D5 Q( N+ f E* h- Y
  23. if(dclk_shouldOverride) {* H, d) O6 q2 J+ ~8 S2 L5 n
  24. dclk_original_documentWrite = document.write; 4 J) O3 v N* s; n o
  25. dclk_original_documentWriteLn = document.writeln;9 d9 o- @+ Z5 ^( O* N b& _
  26. document.write = dclkWrite; ! C5 |1 A* P* e4 V( D6 T; x
  27. document.writeln = dclkWriteln;% n5 X, o& y, f$ ]% o
  28. } / H2 z5 j0 x" Z _; r: {. ^' j
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 ) ~2 C7 q. q$ {+ i* H ( F- B' e4 x3 Q! a4 i* @雅虎中国 (cn.yahoo.com) 9 u3 B' P, g3 _) ~$ \Yahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 # o/ @9 D& B1 E g; C" {! W7 m 7 y0 a5 j# \, B5 o) W0 w' S腾讯 (www.qq.com), T, M# C/ R, V1 A 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。/ @- s8 ?/ L$ B! Y! ?& Y . I( g7 ?+ v4 f" O" B% \) n * L# X8 a% T( q1 W/ j0 U! z" o$ R! {9 K t5 Y 6 r+ q9 Q* P& y& W# A* r. R) S稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。" s1 y, h0 W, D& V ' k$ P' v0 g5 p" k* Y3 w$ Q 使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。* R4 \5 e% V P( D/ l P% \* Z; y z ; x- G$ S7 y$ `' o网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: ( g& n7 M* v# F, s* { : Y) Y3 W2 a q9 Y4 s2 f //只要在 </body> 后面加上一行 0 y7 V! d1 v# v6 Q' |# Y<script src="javascript:'document.body.innerHTML+=''';"></script> 3 N, q$ b( q$ x* h真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。 ; t; x! g1 Y2 a' g0 a 2 v( g/ s; v2 E' ` G% z我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。5 r' U$ R" w$ u$ J; P9 O& H( L2 G. G) W5 ^ ; M0 |+ g0 b1 H, X8 k) v 网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。 ' |. B) t" m: w" r0 d9 I1 g! z0 c) q. J 可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。 % R7 a0 T! { p- L& Z) m3 L {3 Z3 I/ t# |/ u) X( I! O 一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。% }% P6 u/ l# O3 ]0 L ( z0 L P4 c( ^" Y; Z# n- Z" E9 pObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。 , ] o& o( b- _- g( W1 u- P ; D" d* D% k; r最新的ObjectWrap 可以从这里下载。 % u, C6 V! ~9 c; T * M& x: D) y( Y; L7 U原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。 , z1 \; J, b7 Q1 q. T8 I 1 h$ S& O4 Q$ x: g0 c0 W至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。 ; Z6 H# k4 B! F' |8 J; S . Q" n% a+ q* o1 |最后向ObjectWrap的作者 Karina Steffens 致敬!% O1 Z% A4 e5 x2 F6 V 4 C1 t# x. u `1 U http://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。+ X/ v- _3 u- b- | ) q) c% g: y8 r; H当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: ( O; I) c! z2 {, T: D, N 5 z+ K2 \, Q2 m' i5 W1、新建JS文件: . J P( h" J9 C" @2 E 7 M# B+ p- {7 i' u7 K' K# V0 d: m//v1.0 : Q) E5 n2 ?/ _+ \; v( M. \//Copyright 2006 Adobe Systems, Inc. All rights reserved. ; q _9 w7 x" k! I8 E( e% z5 k9 yfunction AC_AddExtension(src, ext) ; l6 o6 m/ P; G1 |/ S! _8 p: D% P/ X{- @9 m! E0 z6 k* i if (src.indexOf('?') != -1) . ^& w8 ?& X2 n$ {& K. V- g return src.replace(/\?/, ext+'?'); 9 N( r7 b4 z, `$ V; i, \! u1 W else- m/ C- {: r" s) J( w. I- @ return src + ext; m1 f9 k0 C. ?( {" o} * e: t( E/ E, g/ `! S! n; w ' ~" c( I6 ^9 F3 E/ F3 T0 }function AC_Generateobj(objAttrs, params, embedAttrs) 4 Y, {1 W5 T3 A$ c2 A; y3 f { 8 ?6 z- c9 J5 g; w& ` var str = '<object ';: A6 a8 c9 M4 Q9 |3 @ for (var i in objAttrs): o" v5 G. v" n" ?7 ~ str += i + '="' + objAttrs + '" '; 0 K2 K" ^3 v! x/ {2 } str += '>'; 9 t! c, \5 H6 D2 O for (var i in params)5 p5 ?: w+ ]& o' m. m; W1 F str += '<param name="' + i + '" value="' + params + '" /> ';' M) e( s0 G- M/ a0 H& ]! d# Y! x str += '<embed '; ) d- f' z$ i$ C" A* F: B for (var i in embedAttrs)8 o+ m, Z4 y$ v$ W( [8 i R str += i + '="' + embedAttrs + '" ';4 W+ y% C- }8 G& p _0 d4 V str += ' ></embed></object>'; 9 z7 b8 l2 ?$ r: s; w5 i 9 T% k5 |1 y4 S& r0 g document.write(str); ( W% p Z' z/ Y1 j9 H} 0 ]0 ^$ e9 J0 g 5 N1 D" i/ S! b8 r5 ofunction AC_FL_RunContent(){+ z+ `; r2 G8 Y& Q: H4 { var ret = U+ g9 E9 A* S& i: B1 L p) N) z: Z AC_GetArgs5 O! h! q5 S0 {; b; b3 |0 n5 | ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"* J/ R8 X7 F! y/ ] , "application/x-shockwave-flash" ' n$ W; I+ }7 H* ?$ h5 i0 s! C5 g# n- [ );* f4 h5 N* U# B+ g* [ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);" V$ U; w: k' Z" N8 ], R" m }$ A* _/ Z: _, `- N ' W9 I3 c% s( N+ D! p2 M& Z function AC_SW_RunContent(){ ) q* E* U, _4 X var ret = H3 u6 G' Y4 s0 [. D AC_GetArgs ) R& K+ t, N8 i ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" * N. y1 s- b5 `2 ~! c2 y3 { , null ( \" Z5 |" R2 A) `* @$ h& u7 p ); # q( m- Q4 a- G; O9 s8 ~ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); " I6 F. N5 K# S4 W; J" a}% {8 o3 [ H& k: F $ t" b& B$ h5 n) n1 yfunction AC_GetArgs(args, ext, srcParamName, classid, mimeType){ % V, z6 i7 ~% c: m7 f6 b var ret = new Object();6 x$ F& s2 a! \- o* i ret.embedAttrs = new Object(); % S* P7 x2 Z- e' a1 e) Q ret.params = new Object(); b% K' B! r7 R, l8 v4 e4 N: J ret.objAttrs = new Object();6 p* b! i2 G: _& i5 f/ C3 B2 T for (var i=0; i < args.length; i=i+2){$ T$ m. }8 d: q8 A l var currArg = args.toLowerCase(); - Q" s$ s: @$ r G1 f - i: o2 ~. T0 `% Z# T switch (currArg){ ' i- b, b n7 F k case "classid": , `/ y3 e( I9 E P" V break; 3 I- Q! e3 A& e7 d8 z case "pluginspage": " m4 p2 ?: P$ f. Z W, v% y ret.embedAttrs[args] = args[i+1]; 0 @9 K* R: n: g1 f' W9 a. n( W7 F break; : i8 z/ ?# F, U9 d3 |9 `- \ case "src":) U8 E4 r$ p2 H% d6 N1 W5 K7 g case "movie": " l. j2 @1 a& o: a. H$ b9 Q args[i+1] = AC_AddExtension(args[i+1], ext); 1 j9 h# }$ O" H4 `2 C" x ret.embedAttrs["src"] = args[i+1]; % P+ w( D) \( K/ Z3 p6 J ret.params[srcParamName] = args[i+1]; 7 [/ O' v! ]. n break;9 E! [* {8 s7 y( h! Y8 q' m2 x case "onafterupdate": ) c$ V, Z7 t# c case "onbeforeupdate": . ?4 a- _. V$ a3 ?+ r! [ V case "onblur":; ?2 N* l- O! X% N. K( N: B case "oncellchange": 6 _4 G" K3 o/ k5 C9 U case "onclick":5 q k0 w+ a9 g2 [5 ]* F& E) }1 L case "ondblClick":5 p+ |$ y! a* ]! n2 x9 H case "ondrag": & {2 n% y1 r/ A8 ~3 N e3 H$ E1 s case "ondragend": : e6 H0 \; X; e% Z- w case "ondragenter": ( j* i4 n. \5 A9 h8 Q case "ondragleave":, B) m) J5 w" u- c c+ f* K case "ondragover": g3 Q2 v! Y3 \& i: U% _0 Y" R case "ondrop": + |/ Q U+ K7 ` case "onfinish":4 ~8 | q) a, D2 ^. D4 l1 q case "onfocus":1 M! u8 M. M& u) b3 [ case "onhelp":, j- x$ F2 |' z case "onmousedown":' s C- T. [* u/ s* y8 @* V: Q& s case "onmouseup": ) \1 i7 ]9 k: X2 F+ ?; F case "onmouseover": ' T6 Z6 G0 E; e6 } case "onmousemove": / m2 b' b- {( b0 h; C9 z case "onmouseout": r& I9 w4 @3 f. h b) B case "onkeypress": / n6 k! x+ m$ A9 A: c case "onkeydown":8 v4 {: T9 r$ I case "onkeyup":) e8 p& e5 e& a9 O! u6 z, f case "onload":2 ]6 h2 A3 Y* H. e8 l4 I case "onlosecapture": 8 Y2 h, I: h/ D7 D `4 A case "onpropertychange": 8 g" c5 n$ T; ^# b" T c case "onreadystatechange": $ p. L! e5 {% P! F) s case "onrowsdelete":6 ?2 R7 O1 C- p5 n' [2 h case "onrowenter": $ f+ [) q7 E( x' ?1 f% w9 N8 s! X case "onrowexit":7 V* |, }5 x# V case "onrowsinserted": ! x# I/ V1 o0 z case "onstart":, z+ F) ^( d$ s case "onscroll": : Y- E2 }! C- y case "onbeforeeditfocus":! X; m+ {1 }( T- O) t& {$ d! } case "onactivate":& s, {# {2 C# G8 Z, i3 F' V- k4 r case "onbeforedeactivate":8 C' d+ X* M% c; h1 O case "ondeactivate":7 e r) g; J H1 `/ k: g case "type":+ e _1 _4 B/ X* ]1 Q5 a7 v case "codebase": 8 T* l6 I; F9 h- I% Z2 [# Z ret.objAttrs[args] = args[i+1];$ l: ~5 I7 G | K/ E+ U break; # V# r5 m6 E0 X. r. W case "width": 9 m' M9 n" N$ ?& e* k7 m9 [ case "height": ; a% B5 V [) w) ~% @" |2 j5 T. ?: | case "align": % Y7 e) {1 k# B; k case "vspace": & \; E7 z/ F- g case "hspace":4 ?# M; B6 W: _! m! n case "class":6 Q( F& s/ R5 K1 R$ u7 _3 O; c7 b case "title":0 I5 ~) m; B3 D- H; c, b3 l case "accesskey": D' m& O7 V4 w2 u, E% g9 i case "name":0 Z$ M" y6 X& t( D" l Q: l3 Q$ p case "id":% N8 G" k" _: w1 J9 A. H case "tabindex":; Z0 P* _/ I- B7 f. z ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; 6 X; T9 C" R+ M2 R& H/ m* D break; " ~. T+ h/ M% t% @ m$ V. t7 e default: 7 n/ D9 ]* Z! z4 x* f2 v+ n ret.embedAttrs[args] = ret.params[args] = args[i+1];) o$ b% G# G: D# Z p9 A }/ h; d, q+ A5 W! Y, u3 s+ v } 4 S# g! E. s5 a1 d# B* B% X ret.objAttrs["classid"] = classid;* G7 \# k5 f& |$ V% v8 R- q$ e! _ if (mimeType) ret.embedAttrs["type"] = mimeType;; [; q# r; T/ J! c) g& |+ d return ret; ! w! q' [. ~, I. d F9 Y( `} 1 u1 I3 M7 ]" n( c; j9 L/ x/ F- g% C9 J0 w9 J 2、保存为:AC_RunActiveContent.js5 b* W- J9 p9 w' e - z. |% j2 T( x* X* u/ u; C4 @ 3、在所需的页面中添加; 5 w; `5 Y. r( C& U8 ^9 p ' r2 ^. P6 K; d, I5 }' u- i& Q<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> + d2 ?2 S( r0 v A1 y! V 4 y) }. }% f0 z& M5 Z% j4、在插入FLASH的位置添加: ! k2 K/ ^, s# `+ C , Q; i* u/ D/ p<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>, w! w% A3 \7 l$ z8 _9 q/ z* } <noscript> ! {2 A8 J5 \) l( [& C<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">; n4 O! ^6 s. ]2 d" r4 [+ }# z <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf"> . O; R7 r, t" f/ p4 s; U<param name="quality" value="high"> 6 X9 ~! H$ }# Q: j3 ^4 v0 u/ l4 G<param name="wmode" value="transparent"># a9 {7 k0 q& P5 v. A, \, R <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 s0 Q* B7 \6 t4 B( b; O5 S</object> * Y W8 Y; e& [" G# S</noscript> " }, ]9 A/ c7 @ B0 K* ?. z u1 t/ s$ b0 O 5、页面中的完整代码: + R, Z s4 B) ^$ a' \7 f# e) M# b7 \' m' P <html>* E8 ?5 D ?9 F0 T7 c# i" b w <head>7 H" l) E' j: p( a$ _' c' I$ Z <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> # u& `2 [5 N1 ?3 T- X4 ]<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title>3 `7 z5 K! O& T/ B! x r* b7 x <!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径-->; p4 l$ t. W2 x& E3 C* D R. Y <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> 8 N* X0 Q4 H% y0 f<style type="text/css">: n- j$ C" p0 |3 } <!--' D1 {1 Z1 P" o e' {0 ^) q body { W! @$ S8 q. P$ m; Q. p2 m background-color: #CCCCCC;* Z6 l' B; i+ e: z9 h } ! R3 i; W2 c- r" L1 q--> % |; L) a" R6 j0 o- ?$ ~4 i</style></head> - v: _0 R1 w4 B<body>+ V$ y6 F# @ D; a2 J 8 q( d9 B, H$ l7 S Q<!--下面这段JS修改的时候要注意,一共要修改四个地方: $ Y0 m- P) L" J7 ~300 是宽度; 0 z0 P; | d& o& ^7 n6 C5 h200 是高度;9 V* r* I* T7 j4 b5 o2 s% N, t images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->5 n2 C8 J' E# g/ C( 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> 2 E+ ]' f( H7 D: a$ r* o<!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。-->9 a) x/ _: H5 B9 l; @3 ?5 k$ ] <noscript>9 ?! P1 g2 m C <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"> 6 p J3 W3 f- {/ }! U <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> 5 S+ P2 z4 F) Y( @2 F- e/ T <param name="quality" value="high">- M: A3 b1 |; K7 N! s <param name="wmode" value="transparent">9 G/ \2 H$ U+ ]8 b t; Y8 U7 W <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& r3 |( s& E: W</object>/ A8 V& E( K2 J5 A </noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!" e6 G- d7 Z0 ?7 g9 `3 m   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! & ]' P( E: L* l4 `  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!0 o* g2 ^+ X; r0 M, q/ y8 p   不敢独享,先建一个JS文件,写入以下代码: 2 M* _2 c& _% o) [8 J7 _ S8 [6 \: P- d E m, D3 x" J
  1. function al(){1 r* w3 R; ?- d9 n. B4 |
  2. alert('ok'); . n" a) I! d9 A: d! k4 Q3 O: j
  3. } * [4 I9 Y( L) C5 d$ u$ q# [& D2 L
  4. function AC_AddExtension(src, ext) " R6 m6 Q. O# `8 A
  5. { , ?* k( X c, R4 Q6 ]
  6. if (src.indexOf('?') != -1) 3 T/ b% x; F, N5 m: N
  7. return src.replace(/\?/, ext+'?'); ( ?. y% p" Z$ J6 N k2 J7 Y& D* i; W
  8. else 4 G3 P/ K5 w. ?! @
  9. return src + ext; 1 r, d5 @ \, p- s) ^; Z
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) + f- b! L1 r- y+ I
  11. { $ R' n7 ]! s& \9 G+ K d+ b
  12. var str = '&lt;object '; # N0 d9 x$ F0 w0 X* H
  13. for (var i in objAttrs)- V' K ~& M: b- z
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';* g* U! g' k5 G- z5 E
  15. str += '&gt;'; J. M R* j8 e- s) X. w
  16. for (var i in params)$ n2 K$ X( h" A' i8 B# Q8 Q
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; - d# O) L$ l( j0 ~5 n. B+ L9 u
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed '; 4 Z* n% |& ?) K. _
  19. for (var i in embedAttrs) 6 m2 ]8 {% \- L
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; ) N" ~; O8 {$ p3 \! h5 q# k7 j
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); D4 m1 m2 ~/ b+ \0 b2 Y% R
  22. }function AC_FL_RunContent(){. U/ u) R' S6 a1 W
  23. var ret = 4 d8 j. _, e, k
  24. AC_GetArgs . x* O* Y' K. M, m' R7 L
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;* i9 Z4 j8 n& q( u( }1 V
  26. , &quot;application/x-shockwave-flash&quot;. c/ w! Y! G6 e0 Z0 O' q( n+ S
  27. ); . t$ g4 m$ `4 x6 V! N
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 6 n) q$ F. ?( k# J2 K" p0 z- [1 _2 L
  29. }function AC_SW_RunContent(){ # \3 B0 K3 j" z4 X: x
  30. var ret = 0 s# o! u' y5 I0 H; e4 }
  31. AC_GetArgs- x# h, F: `/ [- n3 D
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot;% e' {3 ?) u: ^; ?
  33. , null ' U$ r3 c# f; U8 n& l) N* E# e
  34. );. z h) }! m: M6 a8 K6 g
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); + T2 Q4 ^1 s- V' r1 G
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ 9 Z3 C# s) ] J4 Z
  37. var ret = new Object();/ A" D! @" O: X, u) [2 n; V7 p
  38. ret.embedAttrs = new Object();; N+ j2 N; X& B0 C9 k$ |9 T
  39. ret.params = new Object(); ) T6 ?1 H: K! r
  40. ret.objAttrs = new Object();% u9 _1 I) k7 n1 a& O8 R) i
  41. for (var i=0; i &lt; args.length; i=i+2){ " U3 _+ t( ]: r1 K
  42. var currArg = args[i].toLowerCase(); switch (currArg){ 1 z% `& N/ c4 u ?
  43. case &quot;classid&quot;:: t [, L6 z0 u' P: d
  44. break;9 x; x% l2 E3 v) V. q" y5 @1 w
  45. case &quot;pluginspage&quot;:* y+ J4 F$ r3 i+ o
  46. ret.embedAttrs[args[i]] = args[i+1]; 5 v+ H. c s- D
  47. break; ( c" g! O/ x3 {1 o; j* [7 T/ Z
  48. case &quot;src&quot;: B( }- I+ w3 E) ?6 e+ U
  49. case &quot;movie&quot;: * q3 a8 S. X" B/ F
  50. args[i+1] = AC_AddExtension(args[i+1], ext); " j1 ] H* X5 |0 A
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1]; 6 F; V, f! o8 @& J$ E! ] ^: t2 \
  52. ret.params[srcParamName] = args[i+1]; : u$ l1 w3 I3 |2 E" W" L( k4 }
  53. break; 0 ~! ]1 ~9 g$ Z0 Y9 W6 _4 x+ j
  54. case &quot;onafterupdate&quot;:- v, J X7 f1 h% I# I
  55. case &quot;onbeforeupdate&quot;: : k; m, [! H* P) W2 I5 f! b
  56. case &quot;onblur&quot;: 4 q) K- I! p3 H% D1 Y
  57. case &quot;oncellchange&quot;:' c5 J# a- F: B6 o
  58. case &quot;onclick&quot;: $ @7 A; O# L) S* b+ `
  59. case &quot;ondblClick&quot;: . J7 e2 ~4 C: m3 l
  60. case &quot;ondrag&quot;: ) W8 Q, e" r/ [# ?: @
  61. case &quot;ondragend&quot;:0 m! j( k# |" T7 Q2 E) y* M2 F
  62. case &quot;ondragenter&quot;: 9 h* [, @' S# ^' W
  63. case &quot;ondragleave&quot;:# f" O" A/ Y m, }, a3 J+ h5 H
  64. case &quot;ondragover&quot;:0 n# `' n2 r8 g$ k, ~3 a$ ?
  65. case &quot;ondrop&quot;:6 v: z: k0 H% r. u
  66. case &quot;onfinish&quot;: ; P0 v6 o3 | |2 z7 ]3 d8 x
  67. case &quot;onfocus&quot;: 6 ?0 y, t! m e+ f: k
  68. case &quot;onhelp&quot;:0 K$ m: Y" `/ M1 `, G1 l- X( U
  69. case &quot;onmousedown&quot;:6 Q, O6 L6 A9 [: o4 u
  70. case &quot;onmouseup&quot;: e& K* P- i( h# @( u$ f
  71. case &quot;onmouseover&quot;: 7 j- F) y* b, |6 \3 d9 e
  72. case &quot;onmousemove&quot;: 3 |( K0 i- ^% v/ ~1 ]: V. d% [: H
  73. case &quot;onmouseout&quot;:: ^' B( S* m- q# o
  74. case &quot;onkeypress&quot;: ( Z: D% M' F: c& r& _) {% G
  75. case &quot;onkeydown&quot;:+ U2 b' P; r8 s1 y/ Q7 T" G5 v! Q C
  76. case &quot;onkeyup&quot;: " b7 I" [5 g+ X; p# j& d7 S
  77. case &quot;onload&quot;:7 Z5 U* Q. c/ s% `
  78. case &quot;onlosecapture&quot;:! V% r1 h3 B, _4 m5 ~
  79. case &quot;onpropertychange&quot;:- B2 [; m$ a8 F3 l* q1 v
  80. case &quot;onreadystatechange&quot;:' B# G0 U/ m% R) _
  81. case &quot;onrowsdelete&quot;:, w" v* s& P6 H8 x$ j2 X
  82. case &quot;onrowenter&quot;: + x/ E5 d; L& O+ y- E: I2 c
  83. case &quot;onrowexit&quot;: . s! T$ X# S! Z9 w( u0 Y$ I) Z D! t
  84. case &quot;onrowsinserted&quot;:8 ~ K4 ]$ Q+ v" i2 s& ]- n
  85. case &quot;onstart&quot;: & p. D- E: X' h8 l9 Z/ V2 Y9 b
  86. case &quot;onscroll&quot;: : T+ f" C3 r! Y6 u( T; \8 U
  87. case &quot;onbeforeeditfocus&quot;: * B: B% q J' ^% s! r6 O& E! ?
  88. case &quot;onactivate&quot;: 3 s* y9 D; w: r3 ]# y
  89. case &quot;onbeforedeactivate&quot;: ' o8 F% N8 }% y: A" n
  90. case &quot;ondeactivate&quot;:" |" g) `" h% {9 Q1 W4 q8 {
  91. case &quot;type&quot;:. L% b4 ^; W# G9 I, Z1 b$ Q5 W t+ T
  92. case &quot;codebase&quot;:2 p# a, \' I0 I: l4 i
  93. ret.objAttrs[args[i]] = args[i+1]; ( L% Z0 ]* Y- u2 r0 }
  94. break;, [( Q. s% X3 {: J( C f! V
  95. case &quot;width&quot;: 9 q2 d) @+ {' f& p
  96. case &quot;height&quot;:2 {9 e( I( g9 e" N& x
  97. case &quot;align&quot;:9 i- J) v5 r- B% t
  98. case &quot;vspace&quot;: 1 P2 V- o- }6 Q+ G$ p" G' t
  99. case &quot;hspace&quot;: P- P# R+ q8 u2 `. n
  100. case &quot;class&quot;: p" k; W' Y! K8 W
  101. case &quot;title&quot;: : x7 U8 `4 l. P: K! T
  102. case &quot;accesskey&quot;:2 `% X. j* W# I/ _! z2 o
  103. case &quot;name&quot;:; t8 x3 s) }, f
  104. case &quot;id&quot;:3 f/ K2 j' i! F, n
  105. case &quot;tabindex&quot;:* N2 |. ~. R9 A; s' C2 o
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];* Y+ v! T! }* M5 A* N1 C
  107. break; 0 D$ b( I' F( ^! m
  108. default:0 K! V+ {7 _/ Z3 `# R4 }' r* d
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];! ]' k0 J3 B9 \+ e1 f& F
  110. } 8 ^! ~' Q' V( b+ h
  111. } * G, j) u9 ` j+ V/ u
  112. ret.objAttrs[&quot;classid&quot;] = classid;5 ?% J4 L$ d* L2 R. Y
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType; ( ?, {- E+ ^% R5 \3 y% v$ K5 Z Q
  114. return ret; , h& s8 c0 {0 u! `' p1 A8 q- N$ M% Z
  115. }* f" I3 e* l% b, ^. u6 y
  116.   
复制代码
1 Q" M. v0 m, K b+ X1 l然后在要实现这个功能的页面上,调用这个JS: I; V" N4 D% [+ ` ' f# f- m9 D/ _& C( W
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  . j+ [# a7 {" P/ { h3 @ 5 I# _1 _. j ^" X# a9 }" P7 ?! j# ^4 a0 w 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码: # X' ]1 h, ~3 [ }. A* e* ?* a# ] C/ \* [6 |" ?
  1. &lt;script type=&quot;text/javascript&quot;&gt; 6 D1 Y! @- n2 p
  2. AC_FL_RunContent( + G: a5 }' t0 p' k) W- M, L
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' # h! P) n7 X8 M v2 I' k
  4. ,'width','524' //FLASH文件的宽 1 M4 E9 b+ M8 U
  5. ,'height','55' //FLASH文件的高: q* c4 E* q4 Q
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf% W5 N8 c8 _& z b" \7 R
  7. ,'quality','high' //FLASH文件的默认质量 ; p: b5 }" z+ A' D& b9 U
  8. ,'pluginspage'$ `, }% ~# D% V+ E) t$ r
  9. ,'http://www.macromedia.com/go/getflashplayer'. `- _9 l3 g6 l0 u
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样& N% k! W4 S) O6 F6 {2 m
  11. ); ; ^' e" r, ~6 m9 s/ i/ W
  12. &lt;/script&gt;7 ]9 U' u& c8 e/ a- z2 m
  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, 2024-11-22 04:00

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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