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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。 0 H1 E5 }1 O% Q0 C% U& T4 _! @+ ~8 o& H' v! {1 R 最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。 . h9 Z6 E* t0 { P- ]& m0 `5 g( q! P8 |4 ]: J4 l- D 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: 8 |( r: I2 Z& z/ a6 T3 R8 A( ? ! J5 R3 c# H. ~4 }& p& h新浪 (www.sina.com.cn)' i/ y9 T5 z. \ 首先在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;* F. f, Y, S# ]' ?" W3 g8 V2 p
  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;);6 ]% s8 j5 n6 ?7 H, n& t1 Z3 G
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); ) g2 @) Y5 {8 ~7 q& w: ] Z
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); . C6 R5 _: q3 f; x2 d! u
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。/ W- f) t. O! ^; d 9 \/ Z9 Q' M) m: M 新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 * B2 u4 {% ~9 [# A7 W& ]$ R ; W& T0 r5 Z6 S& z, n搜狐 (www.sohu.com) & o! v7 A U4 o7 Y搜狐的手段和新浪如出一辙,首先加载: : y# v7 h! P3 t& O4 P& m$ g2 P ; t0 K0 u2 ~. h0 x6 d a: d! ^( o <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script> * K/ ]! K, V# a2 T8 ^- Q* C调用:
  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' \3 C9 @- j9 N
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;); 3 t/ Z r; k0 A
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;); 7 {8 L+ E* t# a: K M* ^
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);% t* Y0 X% o) Z
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。' C( w# h! _: K j0 t * s1 l) s6 N. c o) K4 b, O 你说是搜狐抄的新浪,还是新浪抄的搜狐? 7 S2 \5 w+ q T1 J5 `/ H 4 i" q; d( o& G8 Z# @7 h网易 (www.163.com)* s" O* _' K1 L 网易就是不一样,处理手段显得很有技术性。首先加载脚本: - Y8 C9 N' Y. o. H- Z. K* ^/ j, j& n0 ]: r <script src="/DartRichMedia_1_03.js"></script>5 o1 O9 E% W1 l9 u L, S0 ` 页面上直接用 docuemnt.write 写入 Flash 的HTML代码。1 r+ o# N# w$ T, q & t) X% |! `8 l3 Z8 r' T4 f按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) {2 W2 X" _$ W/ [7 C3 S
  2. dclk_isDartRichMediaLoaded = true; % r! w5 j( ^3 v( g5 I6 B
  3. function dclkWrite(str){ ( y( T7 S1 M' p4 t) [
  4. if(dclk_shouldOverride) {1 T, ^- {7 o( n8 H! t0 f
  5. dclk_original_documentWrite(str); 8 [+ W# z4 _- v0 W v" q
  6. } & F1 z0 z7 K* d
  7. else{ " B: U& o: x9 X
  8. document.write(str); 3 r, L' q P! x1 J& w2 q, u$ U
  9. } " K8 A5 L6 V2 Z, s$ c
  10. }6 P% t v5 V' n: A% K, ^2 ~
  11. function dclkWriteln(str){ 5 Z p- [4 d4 b3 W/ p' m
  12. if(dclk_shouldOverride) {# e& b4 x/ B% V* M
  13. dclk_original_documentWriteLn(str);5 ^$ ^# T; s! t( D
  14. } & T% y; g/ l( E* z, V' R9 ~
  15. else{6 q/ m2 z$ [/ r4 x1 l! H) Y' X
  16. document.writeln(str);! E; |- @1 E7 D. D+ i- u
  17. }2 N, F+ s4 q# Z( k+ b, i% z. a3 I
  18. } ( Z" L7 P" m. A6 H0 }5 J
  19. function dclk_isInternetExplorer() { 9 r: c: t, D( L
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); - g6 [' E* x) y9 l- u7 O9 T, D
  21. } 8 o: Y( A, g2 V" k+ L0 w( W
  22. dclk_shouldOverride = dclk_isInternetExplorer(); ! c+ N* Z. U9 g; R, e! e# J* ?
  23. if(dclk_shouldOverride) { - `% ^0 ?3 @% Q6 w
  24. dclk_original_documentWrite = document.write; * N4 \) B$ d, `8 \
  25. dclk_original_documentWriteLn = document.writeln; & ~% E! Q( W- N% @# G4 I/ {' o
  26. document.write = dclkWrite; ' H' }4 v1 C- G% c! H
  27. document.writeln = dclkWriteln; 2 b8 a0 U! m: |' L# L* I- E% G* p
  28. } W% t6 `* m5 n( b7 A1 P
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 " s7 I1 ~! G% E7 {* | h0 L% t" H! U( I* L# f }雅虎中国 (cn.yahoo.com)' `; p: d, k6 [) v0 e; i& D Yahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 0 o: b @4 t, M% w( }$ y5 i4 }4 ~2 P: G 腾讯 (www.qq.com) + W" d# n" O+ Q( s' g7 f7 z4 ^3 f6 }默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。+ Q5 [4 n1 h7 N 5 R. L+ Z, c+ g " W* T9 L5 k( b/ G+ z # D9 }, l, ?( w# y 0 p; |* V" i8 @2 v稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。' V% L$ z3 t" \! K: I 5 T: d4 s/ a' K2 i! ~' v7 |使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 $ A: O3 }# g( B 9 @3 j- U# w5 U6 `网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: " W$ A1 S" W- L' P' T 1 v# ]+ k1 G! Y7 m //只要在 </body> 后面加上一行 8 J+ j. h% G! b$ [ <script src="javascript:'document.body.innerHTML+=''';"></script> & r9 A; S& D Q" u+ Q真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

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

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。 ' k; X/ B& }. f0 ^1 x- t8 ^2 J) W 5 |0 O9 s( K: l; n2 v" j3 L) B$ }当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法:& ~3 A2 ]+ z1 J' V 9 e7 u9 G8 Q+ N, C& E: z) H8 Z* ^, J 1、新建JS文件:8 B( [% ?! G4 k0 e9 j N : G2 }2 W' F: t//v1.0' t! b$ y6 B3 A& R( k //Copyright 2006 Adobe Systems, Inc. All rights reserved./ j+ e2 W, E+ {; P4 d2 M8 ?/ Q& z1 q function AC_AddExtension(src, ext) # ~! B5 \; E, O0 ~2 [+ f{0 W* |; Q6 ]' S m% V: B; J7 s5 L. R if (src.indexOf('?') != -1)$ o* X% K( K) }* E7 V9 x$ n return src.replace(/\?/, ext+'?'); Q1 O( Q. ^! `0 k4 Z4 e else j" x4 D6 o! Y* @+ m5 `; H return src + ext; 9 @0 i+ @1 T8 g: r4 f3 L% A$ P0 F+ R} - N" I/ N& h% Y+ B5 ]3 d: y( w" h; | function AC_Generateobj(objAttrs, params, embedAttrs) e4 f3 L$ L" r! t; ? { ; P% b' U% u- K var str = '<object ';( {* e. t, N1 d/ n/ n0 J8 N for (var i in objAttrs) k1 x4 Y i- [6 [4 {6 ` str += i + '="' + objAttrs + '" ';0 c' S6 H4 n/ s8 @! Y2 Y t str += '>';5 D' z( U# o3 w# A) Y# f, q for (var i in params) # d S0 M) Y2 o1 c' h) l* p) R. } str += '<param name="' + i + '" value="' + params + '" /> ';' Q- S3 Q5 \: {+ S str += '<embed ';/ Z8 n' B9 D2 Y( h' ]1 U9 |1 ^( ^ for (var i in embedAttrs) 8 |& x: j2 E7 X, n) G str += i + '="' + embedAttrs + '" '; 0 A/ H" t m5 x9 e4 ^3 T1 y: C str += ' ></embed></object>'; 4 B0 x0 m7 A8 Z! R% x5 g+ { J * d5 K& ?4 j3 O* n, J4 o/ C7 { document.write(str); 1 }& Y7 J: R6 o3 n- v) K% z; o}" J+ E" G1 x( D; w; D: ~" _0 _) Z ' w3 Q. E; _+ w8 Kfunction AC_FL_RunContent(){ : w2 \- V& [8 Y9 J8 i var ret = , |3 G% a6 s3 l$ p* e( I AC_GetArgs % w4 R7 C: D. |; r- F' \3 \; c ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ; m7 \5 w- H! O1 _; n0 U3 G' t , "application/x-shockwave-flash" ; E; V$ ?/ n: j( y% A ); * d$ E% b+ M+ G/ J+ _6 |" ] AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 8 _& I" Y! s& \) [}6 j0 f c5 G4 U ( Y# v4 N% C2 Mfunction AC_SW_RunContent(){ : x: w$ b3 U4 y var ret = & j! C) p' Z; |, `, G0 L AC_GetArgs5 P6 l7 ^ l4 y4 D6 h* i5 v ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" 4 |- f7 q/ m% R# B: } , null , Z( \; p- b5 f% E# A' [1 }, ^8 K );7 W, ]# j) Y9 l1 [$ Q9 l AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);1 e! }; a7 j( W4 y( ~- \: f }$ [5 ]+ E' C' j- Y" K ; M7 }- V" ~* ~" C' B0 I) ?function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ 1 z. M; e' ^4 T1 V7 | var ret = new Object(); / u5 D# o# x; o1 M( K. J0 P ret.embedAttrs = new Object(); - f$ J( M" E: s _( z9 i' f ret.params = new Object(); ' X$ [) l& ^+ ^/ B$ [1 t ret.objAttrs = new Object(); " |' ^$ G }* e# K for (var i=0; i < args.length; i=i+2){+ J8 |( Z& |+ d6 f' i% j' C7 L var currArg = args.toLowerCase(); $ B: Z& j9 e" C* W. E# |9 U; a4 c9 H5 c switch (currArg){ % Y& H; J+ Y" m case "classid": 2 c( s4 |! D" d8 w6 ] break; 9 w3 ~ t, ?0 \* k1 H$ i case "pluginspage": ( W! }- C" d5 {( @+ }: x# w ret.embedAttrs[args] = args[i+1]; 6 W/ o2 R8 o. s6 |1 k" x% H break;9 g" F2 s* Q' s( W- h case "src":0 S9 L, p0 ]4 ^6 r v/ q0 j- a case "movie": 7 j4 P+ c; ~4 B6 w6 p" l) g args[i+1] = AC_AddExtension(args[i+1], ext); * a( ], Y) N) e/ H ret.embedAttrs["src"] = args[i+1];: Q6 A8 ]6 N P S8 E4 ^) C, E ret.params[srcParamName] = args[i+1]; & t( j; x% I. f0 W break;; E( B W! x* m4 e3 j9 q case "onafterupdate":" o0 F; W5 _+ T0 A8 l& I9 x( W case "onbeforeupdate": 2 b: K/ \, ?) b" W, G case "onblur": - y' y$ E$ N9 K/ Y* [ case "oncellchange": / w D0 ?. l$ ~3 s; n+ H9 g0 K case "onclick": # b$ c+ h9 ~' j$ `9 C9 i: \0 d$ ? case "ondblClick": 9 v7 C7 r2 ?. Z1 L case "ondrag": # \- V; F- G$ Z# b5 J, t* w case "ondragend":9 c/ I- `0 }1 I+ T* N+ r6 ` case "ondragenter": : _, M* a, [. F* g. P: p, _ case "ondragleave": 6 R& O8 H) L! A6 F* P/ i0 J) N/ R case "ondragover": $ W" M/ z0 ]7 X& _ M, x case "ondrop": 6 d) P6 p& @% x( g) G) i; L case "onfinish": ' }8 ~7 V6 ?' j2 |1 k* m case "onfocus":- v$ x+ {; l6 K- a" _! s) P: \, U( B3 r case "onhelp": ' t& C9 u% ~: O2 m; S9 t& {5 V! D case "onmousedown":5 C! Y$ L. x8 R0 _6 M case "onmouseup":' U: O$ _; e* t, z+ O' E) \+ D a case "onmouseover": 2 }1 Z0 V2 Z8 x- f7 ]6 [ case "onmousemove":6 b" {7 M0 f; g% O case "onmouseout": 3 Y0 M7 ~# A: U: ~8 g/ }) u7 a case "onkeypress":, r8 [. {3 d" ]9 b1 G+ D1 n case "onkeydown": / P$ N6 j+ _$ |' \" ?2 c+ X case "onkeyup": 2 H* i1 E$ N! S+ Y+ R9 M0 h1 f2 { case "onload":- q' C) i; x5 M6 W# T case "onlosecapture":. Z1 U" T! L. S F4 H case "onpropertychange": / ]8 F" D7 O, M7 a3 P9 z case "onreadystatechange": & `: H. M" b) v4 F a! O* ^ case "onrowsdelete":" S4 [4 ]: Y! H4 b case "onrowenter":1 b5 Y1 ], T# n+ e8 [ case "onrowexit": 5 |6 R2 }9 ~# V9 Z4 s# w! Z case "onrowsinserted": 3 o+ x: ^, V; m$ s8 Q case "onstart": 4 f6 C$ ]6 t) m7 `$ Q case "onscroll":& A8 G8 z! o4 h; U0 |9 ^: k case "onbeforeeditfocus":' n: b1 ?! b4 N case "onactivate":( a* F& b1 L/ x" D4 N- e case "onbeforedeactivate": g% G# [4 q' K case "ondeactivate":9 n# Z- L0 I: K9 z case "type":8 r' p% H& \9 u" j1 e case "codebase": $ u: s$ @* i' M- E/ ]; t8 Q ret.objAttrs[args] = args[i+1]; ) {' y, l( Z; e/ T break;' H' a+ I! R% q case "width": 9 i' r$ _2 a8 l5 l8 W5 \6 A& J case "height": 1 {) n* P2 _; P/ U case "align": 0 C4 M5 [* g1 T) U: W9 E( b* W3 m2 ^ case "vspace": 0 o9 u8 t- J: R. r case "hspace": 3 }; w' d( ~$ o2 _) j$ e5 A" o/ ~ case "class": ' Z. U" Y6 a4 D8 p+ j& D" v! x case "title": 9 \: y7 }. \" b9 [' w% B3 j3 s case "accesskey":- z/ {9 N {. | M: a% n case "name": % f* h0 _4 e, a; m1 W" F& j case "id": T: e. ?6 q9 w& n! Z case "tabindex":9 g- t; T. i; K! c ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; ! ?5 `4 Z1 H. X6 ], j" W6 L break; ' h& S% s" h" Q default: ( p7 S) E* Z9 u7 S( g ret.embedAttrs[args] = ret.params[args] = args[i+1];' `" C i) ^# r8 i2 i$ o }3 W l4 B# X( K! U+ g+ m; { } 1 q+ h. x4 ?1 U% f$ { ret.objAttrs["classid"] = classid;# `1 L) k" r5 n/ G3 |# [$ I" U. i5 [! i' \ if (mimeType) ret.embedAttrs["type"] = mimeType;7 \# g; Q; N- d5 U return ret;4 J% x* y/ l% `: i8 q8 s- I4 U }( o6 v. e$ q4 `1 a ' T' |+ r2 E1 w+ C) k2 Y. B2、保存为:AC_RunActiveContent.js' V0 G8 C: c- o$ p4 B/ s0 R1 \& d 2 j2 p: W) C8 f5 m" s. f3、在所需的页面中添加;# Z, [; b7 F7 G# g / A) h* d7 P! p+ o7 A4 D% C z& ?<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> ; G% v, U4 V% H8 A% {8 e. i: N) ~ - j/ s& e9 |$ v' Q' S( A+ t4、在插入FLASH的位置添加: 3 U2 Z' R) U& ~/ p. p2 T3 z+ q p; ?( O; c* { <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 `* ^; z9 X3 g. j6 p; m! K: h <noscript> # R! P% B4 d; s1 u4 a; j<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">' P8 r; [% O% j$ ^9 h9 I <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">+ ]3 V* w# M" u8 ~! f2 X7 u <param name="quality" value="high">: z8 P) `8 B6 c% _ <param name="wmode" value="transparent"> ! k' u; H! k/ K) V( i; I/ A0 \<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 s. J2 s2 \; `; o</object> 9 |# _, o1 ~: l$ C1 C</noscript> + D2 i5 ?" V2 r3 p% P' I) t6 y% w 1 c$ k7 Q$ u" J8 i5、页面中的完整代码:/ X7 U8 a) d7 p) ~ ( ]4 d e# a" U9 d' E4 | J<html> 3 J8 N. `$ H2 T<head>; e# c- A) T u! S <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />* O: y, k. o# v0 L: } <title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> ) Z& |# m* b1 J$ l# {0 T3 K<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径--> 4 z! C- V' V5 Z6 l7 x5 y/ S<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> ! z, ]7 w. l7 {1 I- j( M% W<style type="text/css"> ( {4 m, T) x3 Z4 b& x6 t2 W# D<!-- - d# x, D( G- F5 E( u- q: ^- j- ?3 Tbody { q0 ^4 f/ ^/ a background-color: #CCCCCC;. J0 q* l( ]6 d }/ Q" d. @- T" A2 Y, m --> 6 ~& _; f) e5 z% Z! \- D" b" R</style></head>7 E3 b+ V0 r" E1 O9 j <body> % u2 o3 I4 y3 o. _- r 0 `% q e" l% {8 w6 V; H1 ^<!--下面这段JS修改的时候要注意,一共要修改四个地方: 0 M$ U& q# \4 Y, a; C" i! }+ C: Q300 是宽度; $ r! l, L4 w1 Z) D7 p5 @+ a3 h% Y200 是高度;8 _$ `3 B# I3 M/ D: i( J% Q+ E5 W images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->/ [1 H- z$ Y& X5 |8 h! m+ J% E& [5 l) N <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>- _* G4 B# I) j# G6 `: f0 P <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。--> 3 ~9 S# c/ E1 @4 L$ R$ w<noscript> d3 g R% v0 V0 s <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">& {* R! x9 e# k% t; e7 y <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> & C8 S, L. k# } <param name="quality" value="high">. l4 i6 k6 `' S1 ?, L <param name="wmode" value="transparent"> " s* ?7 b* q2 u: b/ v7 l% j <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>. v+ }' O% Z/ R" z+ Q/ M </object> D1 x- M, P) m- B0 j</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧! 9 m, ~' f6 e6 Q6 l i, G3 f$ q  今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! q0 v w/ b& b0 {! d; ]9 t! j   终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能! ) c7 E6 T3 r( @4 J# }7 Z  不敢独享,先建一个JS文件,写入以下代码: ' j2 b# p, T4 I0 ?( O" j: L1 O) V7 X+ N& d3 E$ q
  1. function al(){ & X6 A% e& ~% i7 {. B8 E8 }- M
  2. alert('ok'); + B( L. d6 b3 @# a% ?
  3. } 5 T `/ \3 s! C' v( G
  4. function AC_AddExtension(src, ext), ^1 }1 v& Q3 H" u/ N4 t
  5. {% r& j7 o! V R
  6. if (src.indexOf('?') != -1) . H3 F @! J* s2 ?
  7. return src.replace(/\?/, ext+'?'); ; m; G1 j. l ]' ~0 {
  8. else) a+ l/ E" H9 ?( K1 d8 g" u, Q- P
  9. return src + ext; ; p$ p, y" A0 j7 v x
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) - F$ b8 O1 ^: @ V% M2 r; E: k
  11. { ) [$ y8 B6 J8 i6 o
  12. var str = '&lt;object '; + r4 ^7 G4 q5 o
  13. for (var i in objAttrs), a% Y) v/ Y+ v8 T! j
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';: G8 m, n$ z* l. d
  15. str += '&gt;';/ q7 L% u5 A; ], T
  16. for (var i in params) ( R$ f( O% S7 ^1 I
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; ';' g- e R& \9 }$ D6 [5 r3 N C
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed ';& B$ ]/ l0 Q1 ^2 {2 Y8 p. L
  19. for (var i in embedAttrs) / v' l( N7 _9 D/ u" ^/ }9 [5 e
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; ';5 a+ z! }9 N, g2 H$ Q# R
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); - n/ y3 d; }8 ^. j$ ^+ a6 h' v
  22. }function AC_FL_RunContent(){ ( K% h4 W# c. U$ A% a' q
  23. var ret = 2 r' x. J1 I. | g
  24. AC_GetArgs. l4 W6 a/ i8 {. V* n- ]) P! x
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;* J/ o" U+ v* F4 r8 c; ^
  26. , &quot;application/x-shockwave-flash&quot; Z* S, O1 Z4 R" B
  27. );( S5 Y' j, O: z. |2 ~
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);3 T, K2 L6 R) r- Q" r
  29. }function AC_SW_RunContent(){8 Y- ^8 b% V9 N7 s& d
  30. var ret = & p2 m4 W9 o$ F
  31. AC_GetArgs) T* F3 K3 d: y0 ?0 }
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; 7 N" O$ R' |, U4 `* H; o
  33. , null % X% Z" ~* F5 g+ b. I7 B+ F
  34. );# f0 y% k4 ^9 N: c/ t" R
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);# ~3 X4 ?* ~. M- A* `
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){* Y- {3 u% [; I. w8 J( q
  37. var ret = new Object(); H7 }$ u1 |( h% j
  38. ret.embedAttrs = new Object();4 H) X/ D5 P9 j5 l; u
  39. ret.params = new Object(); / ~0 h" _$ o4 `( a( W0 k% t
  40. ret.objAttrs = new Object();0 o& A! x, A1 n8 z
  41. for (var i=0; i &lt; args.length; i=i+2){ 4 v; ^# Y. j* c2 L0 B
  42. var currArg = args[i].toLowerCase(); switch (currArg){ 7 l# s, J7 N: F' w" r/ z
  43. case &quot;classid&quot;:9 Q+ g) Z8 k# Y' }# |2 |
  44. break;* S& n3 s* N0 {6 _
  45. case &quot;pluginspage&quot;: 1 \+ ~7 X0 G" V
  46. ret.embedAttrs[args[i]] = args[i+1]; / r4 ~0 a4 z, Q4 W4 y3 d& p. I
  47. break; $ Z! w6 k1 e0 M3 `
  48. case &quot;src&quot;: ], x/ ]( {. @1 v4 W$ a7 m/ B, B
  49. case &quot;movie&quot;: 6 S5 |2 G, x; \0 Y( c9 k( |
  50. args[i+1] = AC_AddExtension(args[i+1], ext); 3 f- [ N! z) \: r" a8 G6 i
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1]; , V5 h4 O! Y; R9 v. E
  52. ret.params[srcParamName] = args[i+1]; * R# f/ B5 S: m+ V
  53. break; % {0 u* ^* R) I, C0 c( ~; f
  54. case &quot;onafterupdate&quot;:+ f6 Q% Q! R5 _5 ~
  55. case &quot;onbeforeupdate&quot;: ( q& A/ U% M s
  56. case &quot;onblur&quot;: 5 j: _' Q* M. c" L& K9 \9 f) F
  57. case &quot;oncellchange&quot;: $ s" a: P- {& \3 F4 B: w
  58. case &quot;onclick&quot;:+ u7 l V# H' F1 @9 k' P; L
  59. case &quot;ondblClick&quot;: R% c( F' T5 _6 j8 b
  60. case &quot;ondrag&quot;: ' a7 }* g( O5 z$ T2 `9 O1 H4 u7 O
  61. case &quot;ondragend&quot;: 4 `2 r( @! O3 e2 { f% }7 ^: f: {
  62. case &quot;ondragenter&quot;:( s2 ^ E( V" _; k" y
  63. case &quot;ondragleave&quot;:) p9 F2 i# `0 t! |
  64. case &quot;ondragover&quot;: % l. Z3 a3 v8 Y9 r- T; S/ m
  65. case &quot;ondrop&quot;: ; W% g, s x& t8 O* \
  66. case &quot;onfinish&quot;: " W' `; b& x* g: x5 h
  67. case &quot;onfocus&quot;:: T/ P* L0 @3 S$ Y2 i# O6 n
  68. case &quot;onhelp&quot;:2 c/ q# k9 w4 }7 t h. v) D& g- m/ \
  69. case &quot;onmousedown&quot;:2 }, I a: N5 L9 S* ^4 v+ u; r
  70. case &quot;onmouseup&quot;: # {- x8 I/ t3 `# P' Y
  71. case &quot;onmouseover&quot;: & P+ m+ D/ x5 k6 ~; h, c0 V
  72. case &quot;onmousemove&quot;: Q: C. Y2 U+ _
  73. case &quot;onmouseout&quot;:0 d3 n N( Z w u0 w% F% b
  74. case &quot;onkeypress&quot;:% ~: g" H& }9 o) H
  75. case &quot;onkeydown&quot;: ( B; G# r+ b2 H& z1 N5 X
  76. case &quot;onkeyup&quot;: 2 G: W# U* `- p6 L6 [9 J' B
  77. case &quot;onload&quot;: 6 x7 Z8 Z/ y M. |: t
  78. case &quot;onlosecapture&quot;: 3 ^4 a2 y! ?; X6 J$ T
  79. case &quot;onpropertychange&quot;: ) d& {: T, g+ y* H
  80. case &quot;onreadystatechange&quot;: 4 V% l+ U0 i: r) H6 y
  81. case &quot;onrowsdelete&quot;:( X, L& A: t8 ?' g" J
  82. case &quot;onrowenter&quot;: " g7 S% V: d. Z& H i& ~
  83. case &quot;onrowexit&quot;: % _# C0 m/ ?' i4 i
  84. case &quot;onrowsinserted&quot;: ; K6 C3 o5 r, n. }5 P1 ^. R, ^ M% ?
  85. case &quot;onstart&quot;:: a# X N- @& N: N1 P3 }8 }
  86. case &quot;onscroll&quot;: , ?, E! K, o* x6 K7 |$ c
  87. case &quot;onbeforeeditfocus&quot;:+ S/ m" ]1 F; S9 C' H
  88. case &quot;onactivate&quot;:' ?" Y x2 y0 `9 h9 ^7 [+ c, u' a$ i
  89. case &quot;onbeforedeactivate&quot;:! V" e$ c) C4 j# o
  90. case &quot;ondeactivate&quot;: ( |( N, ?' c% V6 \, ]
  91. case &quot;type&quot;:: W6 ?* q+ e1 h, t. n
  92. case &quot;codebase&quot;:8 m% S8 E% w% a U: A
  93. ret.objAttrs[args[i]] = args[i+1];3 U" S. N* d7 A2 |5 a! K3 `. e
  94. break; 1 ^6 x2 J; m6 y# a, c/ l
  95. case &quot;width&quot;: : @5 P4 f/ _; w1 j( }
  96. case &quot;height&quot;: ; f+ b9 M. k( Q
  97. case &quot;align&quot;: . l/ |# E) ~" ?& a: \+ ]/ d, }! }
  98. case &quot;vspace&quot;: , T4 O* e5 }: z
  99. case &quot;hspace&quot;: : z4 c. {/ |' G* s. t
  100. case &quot;class&quot;:1 r' _ ~" U w# R
  101. case &quot;title&quot;: ) s$ {" T# q) X
  102. case &quot;accesskey&quot;: , n: H& j( A* Z- o0 Z% j: R3 ?% m
  103. case &quot;name&quot;:& H! G+ \/ l6 n& U! b' h* }7 }
  104. case &quot;id&quot;:9 |/ E, a- y. q- E# R
  105. case &quot;tabindex&quot;:2 A, D5 T* e8 |2 g4 V: y
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];0 x8 _, V6 j2 f/ {+ K
  107. break;7 Q6 V- f1 a7 I) y3 X$ @6 c
  108. default: 1 ]8 i$ A" o( O! `7 {
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];/ q% { X# F; h D# ~1 }; ?- U
  110. } + q: ^$ i! c! n
  111. } 7 @, E& o4 L0 B4 w$ E2 o0 e c& m
  112. ret.objAttrs[&quot;classid&quot;] = classid; ! e1 U, [" l3 h- s' {! O1 m. |
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType; z R) R! j% O9 R
  114. return ret;$ l) S0 ?0 k! u$ j3 ]
  115. } 7 y9 N3 P Z; K% @5 D$ J
  116.   
复制代码
# ?1 O1 i0 C* m9 E$ Y# `, q, O然后在要实现这个功能的页面上,调用这个JS: ! c% u8 U5 s/ y. \% S, O4 h4 n' G ! y$ |8 F0 A' a* f. e4 \" x
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
   " w9 I' S* @8 z) j6 o6 b( ~' b( Z: `: B! X$ k% y/ k; s 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:5 C% l8 f: O4 |' R$ K" c& i S8 U ) D2 h* B6 d' N; G0 ?1 A+ q
  1. &lt;script type=&quot;text/javascript&quot;&gt; $ V o2 t5 G9 B: U( q* f
  2. AC_FL_RunContent(1 Y2 u( Q4 b) a' x( b0 x
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' , b2 ]0 U0 E1 X0 m9 l/ z3 J, [8 S
  4. ,'width','524' //FLASH文件的宽 d# k( S4 b8 J; u! T1 I
  5. ,'height','55' //FLASH文件的高5 ~ q6 M3 Y0 r2 z
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf" x; J# \4 }! S7 v: F3 a! r! g
  7. ,'quality','high' //FLASH文件的默认质量1 s- x# P: x$ z% o7 [& f! n" n8 V
  8. ,'pluginspage' 1 L/ V6 B( f1 M! E
  9. ,'http://www.macromedia.com/go/getflashplayer' , r4 p$ m$ y9 u2 S6 j
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 T8 |6 W+ G+ o& r/ B) B
  11. );6 q+ r# j8 V5 n* X1 d
  12. &lt;/script&gt;, p1 e( g3 G2 f7 k4 a
  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-10-25 03:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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