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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。# b/ o/ R; x* P) B7 G# P 4 ]. K8 M$ `5 Q0 s* n: j$ C5 _) j5 g最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。 ! C( i7 o! H( }2 v- _, Y: A$ V; ]% _( I6 ^1 w7 L2 w! T 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: : G( y4 j3 x- }; r1 U$ K; r j) X/ B- p2 v' x* ~ 新浪 (www.sina.com.cn) " c# a! G0 Y2 \3 ]& B! `首先在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;, x; i" M, b3 ^$ U3 X/ m& P5 N9 F
  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 Q5 Z) U/ R3 T& F/ T! t
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); s6 o" U/ p: c
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); + Y |% T( `( c/ o8 D
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。, n6 x0 Z( M4 H: ~5 q - B2 e8 E3 y- R L* {8 l. g3 {" F新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 ' P0 a: Z7 e. U1 |$ i8 J+ t4 {' v ; f+ D3 C0 z. W- s/ O; V 搜狐 (www.sohu.com)5 E' T* }$ L* d4 F2 v# U' g- ^ 搜狐的手段和新浪如出一辙,首先加载: 3 J5 {7 V9 _6 n- q, P ) f2 D8 m$ x- d5 b <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script> " c8 g) a' @/ j3 q$ Y调用:
  1. var sohuFlash2 = new sohuFlash(&quot;http://images.sohu.com/cs/button/lexus/4501051127.swf&quot;, &quot;_bflexO&quot;, &quot;450&quot;, &quot;105&quot;, &quot;7&quot;); 1 T% }1 A; G E% W( C G( P
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;); : l4 f$ L% u! l& w
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);; u1 Y! B# b' F+ I
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;); 7 L' ]1 `# \, q, n- g7 Y
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。; B$ C( H1 ?7 B2 v ; K- b8 I' Y( n7 ?* ~ 你说是搜狐抄的新浪,还是新浪抄的搜狐? 1 y* n+ r2 Q7 f; ?; ^( |' ]( f- ]- c5 V0 y G/ t" L: z 网易 (www.163.com); k: k+ [+ Z* h j8 F 网易就是不一样,处理手段显得很有技术性。首先加载脚本: 7 a' O( \# U% v # w2 h! i3 R8 n% q# u6 ]3 h<script src="/DartRichMedia_1_03.js"></script> ! Z0 M9 D. S) d' k0 u8 G1 \' P6 d; E页面上直接用 docuemnt.write 写入 Flash 的HTML代码。 - j5 T4 r0 V: P" s/ J2 K7 m& t) Z- F" C2 g; b9 x 按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { ! Y" A' }$ m; p' t# I2 M
  2. dclk_isDartRichMediaLoaded = true; p. \& Y9 A4 B* d8 R& t1 U
  3. function dclkWrite(str){$ `5 R4 h# s1 z* b7 q
  4. if(dclk_shouldOverride) { ) p$ G* U1 a: x5 F( b
  5. dclk_original_documentWrite(str); # v2 L: {' b9 r c* E5 h+ |
  6. }2 T/ I3 h+ Y9 C5 k0 r+ M# k5 G
  7. else{8 }, }8 a' r6 J& `* D$ G+ Y
  8. document.write(str);) H( Y9 |( Y z; t) [) e
  9. } - ?0 I# A. c* ?- f& r4 O
  10. } 4 V1 X f ~2 \( o' Q
  11. function dclkWriteln(str){ : I. G/ z% e# O z
  12. if(dclk_shouldOverride) {* R! s# S9 o% ~7 M* ^. h8 H7 e
  13. dclk_original_documentWriteLn(str); Z& o$ |2 u% I- A$ U
  14. }# e5 N# v9 z, p% L/ N
  15. else{ % U" l+ p: M: }- G$ Z
  16. document.writeln(str);3 T1 S' C& v7 C" D$ A% |
  17. } $ {9 e; I5 ]: m3 M
  18. }! e- T6 X+ q7 R/ u
  19. function dclk_isInternetExplorer() {2 W( a# v9 X5 Y/ y4 i
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); $ b2 e/ J% H6 I* y
  21. } ; k: y4 C( z0 z3 G- g& m" H( ]
  22. dclk_shouldOverride = dclk_isInternetExplorer(); " y& l8 Y) y" i5 v! C; \
  23. if(dclk_shouldOverride) {1 G. s2 ^: X$ I% |1 L+ M
  24. dclk_original_documentWrite = document.write; ; `/ ?/ R4 f- f( t" @
  25. dclk_original_documentWriteLn = document.writeln;4 q( J% j) h; X/ q, c
  26. document.write = dclkWrite; 4 `2 N9 m- H7 g3 I) b
  27. document.writeln = dclkWriteln; 9 y$ O( D) {- r) A- t1 D! B
  28. } 4 k! j( W$ ^( X* M0 G- `6 Q
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 ( r; L6 v7 r% V4 t 4 X$ g9 [/ K3 x6 d 雅虎中国 (cn.yahoo.com)- O/ a0 m7 P9 J Yahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 ( }& Y% _5 u2 o! J8 ~# e5 l7 b8 r6 I$ v; i" i, I 腾讯 (www.qq.com); x+ k" M# o# c# P/ H0 S( R6 h! { 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。) W+ O0 U8 Y7 U0 g: { 8 e' @* _/ E) W$ e$ }3 n6 p+ l* P/ T2 @' I% {" \. G3 Q0 N1 J! h: f 9 c" y. o: }* E! H j+ L) s( Y ! ^& d( V8 Z& A. @, ]# {7 y$ l7 s 稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 - G; Z5 U3 l* U% y( f; U0 c . ]) b6 q# |( A Y使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 $ H: F+ b1 B6 ^ % Y$ S0 Z+ G/ B0 P' E网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: 9 @& r9 W; S: H' j4 {; x0 p" [ 3 c _4 k T0 N3 P( Q+ o//只要在 </body> 后面加上一行 $ r. l; S/ s. Y. i5 d) `9 q( V <script src="javascript:'document.body.innerHTML+=''';"></script>% Y# X6 v/ v% \( u 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。) r1 U' B% E q8 @+ E ! A' j8 K! _/ P+ |' K; B我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。 4 q3 c+ k2 k: n U9 C1 n ) I- V( {- [9 z( e7 l( g/ ^" ^网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。, E G3 C2 R/ ~ : _2 h/ T5 s( F 可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。- Q0 c7 r$ i- m% B+ u - V& m3 k( W l8 g+ l+ W一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。6 r1 L' S6 v, O/ s, O, t$ e+ O/ v ' }8 o& X& r2 F" U, i6 I5 H9 zObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。& a U+ J% q: ^) q8 l $ s& R) R. D; C$ N$ q: m0 u8 Z最新的ObjectWrap 可以从这里下载。 . _3 R4 H7 X0 ]5 Q: C- G d% C! J9 Y! J7 s# ^. l* |, Q5 b1 s 原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。6 Q- P3 L" a3 n- ` + v4 [% l# {( ^& K3 S 至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。 G+ ]) u9 l" G: j3 p) \" ~; o {1 M2 B D, { 最后向ObjectWrap的作者 Karina Steffens 致敬! 6 }* J. L# F. Y8 ]8 N& r3 @1 Z6 k' R Y http://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。 " X0 }1 v: G \! G2 C5 k2 e & d& O5 ^" f! n7 J! I; }当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: 2 R+ s( J7 \& o4 H# T8 [/ i! b, p& u! t; u 1、新建JS文件: ( ?& |; t7 |! ^6 C! |0 Y- @8 o) c; P* z5 e1 s2 W //v1.0 7 q* Y' ~5 F! v; t* ]//Copyright 2006 Adobe Systems, Inc. All rights reserved.3 p3 r! B+ a: s- b6 I function AC_AddExtension(src, ext)9 {# k% ~0 J3 ~6 ~ {; U. t3 |6 P0 W: c) O if (src.indexOf('?') != -1)/ W$ y6 M) n! s- l# l0 Z return src.replace(/\?/, ext+'?'); " b+ i4 [7 W' D1 [ else 8 S c9 q2 ^8 n* x8 u6 K. P return src + ext;6 ^- |7 _3 ?8 w& v% { } ( J; I# A% t5 ?$ t& @ " |- y- ?5 b( x" ?4 h" Y" nfunction AC_Generateobj(objAttrs, params, embedAttrs) 8 A, j; P: T) N, @8 }3 v{ + q. T9 D' I6 L/ U" F var str = '<object '; # g0 X$ C# ^" K for (var i in objAttrs)* G2 Z& Y+ X* {4 @ str += i + '="' + objAttrs + '" '; - Y5 |( k! @! V& N$ ]' c+ X$ a str += '>'; 0 o- X# e3 }- i! r& r3 f" j* b for (var i in params)- c9 u" F6 N; g' a str += '<param name="' + i + '" value="' + params + '" /> ';6 l. C3 Z9 ~, }& c str += '<embed '; 3 n5 m2 s& c( N9 U2 m5 H for (var i in embedAttrs) " j Z5 W6 k$ V7 O) F0 M3 w str += i + '="' + embedAttrs + '" ';6 c# |- Q4 Z( D7 a$ } str += ' ></embed></object>';3 z" Z( E& X: }9 v# j! P r : E! Y U$ d- I4 X. F0 L" W document.write(str);/ a' {8 \. B6 U7 Z/ s! M }6 o# S$ Y; f" [! m6 b' n7 \ F 9 ]3 p7 m( J/ Z3 f @( Tfunction AC_FL_RunContent(){ 8 ]! p" N8 a: i e4 `. k var ret = 5 u: x4 H. i+ R AC_GetArgs* ^* [0 c2 Y; p ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ; ]' J9 ?! O. ]! W , "application/x-shockwave-flash" 7 N7 J1 `: P0 G7 ~0 Q ); 1 U/ D# ^* ~$ Q& W" B" Q, F. H; m G AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); ( h U; v8 n* l}4 ?( p' f4 I! l' Z* v! `9 E/ J . e1 L$ E* I! Y. o F) F2 d function AC_SW_RunContent(){ " X! O' J* L$ J& ?0 h6 Z var ret = 6 s/ i$ W5 S; b$ [8 o AC_GetArgs I* G% j* l& N ]' N% w ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"; u. A& W3 W0 S$ e% k , null2 z a; M: ^0 {) B/ m' ?: Y v: x );5 v# _3 J9 J( z+ R AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); # [: \/ Y% f. h0 {, o}8 S; u* C. \4 ]* C% g# T ; R$ ^- U7 ?- `9 c# ~+ V) c9 h function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ 3 a9 [+ Z* h q# d# T6 g7 Q var ret = new Object();% R, e3 Z6 y) B) o t! C, @ ret.embedAttrs = new Object();9 A7 `) p1 [1 f+ X* M( h ret.params = new Object();. y3 i8 ~4 W0 A* ] ret.objAttrs = new Object();6 k6 y& b; v" q% e4 Z: U for (var i=0; i < args.length; i=i+2){ 0 X- ~8 t- U, q var currArg = args.toLowerCase(); ! @# X) V' O, G) _9 x! s) c% H0 D. b 6 m/ V x* y# h* {) _) q$ n0 T" u e switch (currArg){ , q8 q3 M% k% T% E6 @- F case "classid":# T2 g9 A( P& m0 ~: m9 C# l1 e break; ; x- ^9 B7 d7 Z1 u8 m case "pluginspage":5 w; s& m& [! ?6 N# x0 b: y+ G ret.embedAttrs[args] = args[i+1]; % M9 U' F" Y4 V+ c" e% i a* p break;1 B, ?" J- l- u6 R+ M8 r- f$ c case "src":8 Z) L( }1 h7 ] case "movie": 4 p) Z2 M$ o- ?. Z" G args[i+1] = AC_AddExtension(args[i+1], ext); 3 M/ v2 U' Y# K. W | ret.embedAttrs["src"] = args[i+1]; $ e: b9 L! \! D5 E1 ^ ret.params[srcParamName] = args[i+1]; : }- y! [" |5 q! T: {3 [: p break;+ ?, v/ B+ D! g" Z/ ~ case "onafterupdate": & T& c) z! B; s2 {1 @, L case "onbeforeupdate": 8 H4 ]6 z- S" N/ [+ V$ V) G/ G case "onblur":. U |' m- D2 d7 m D4 _! W- E" F case "oncellchange": - g9 j% U# s! R case "onclick":$ I2 q# ^6 K: D& I# [4 b7 y case "ondblClick": E4 l8 g5 w) Q% N5 C) Y9 A- I case "ondrag":- i/ I$ q! Y/ \7 I$ `+ I6 v case "ondragend": 6 c5 u$ j3 A3 X- L case "ondragenter": - E" H& C" x, Z: a9 R case "ondragleave": ' l* ~ w# `. X0 c) r case "ondragover": * Z6 ^4 r8 x* _ case "ondrop":1 j8 ~$ U# q8 i" c4 M case "onfinish":; j# b! L+ Y1 d( B3 l4 m7 s3 L case "onfocus": ( P7 u5 \5 T4 d case "onhelp": - i* c1 I, _, ^2 T+ C/ R8 ? case "onmousedown": & g* G7 i( Z) B! t1 j8 O0 A case "onmouseup":. Q, D' H j7 G case "onmouseover":" r! ?: B$ x* U9 }7 R6 Y case "onmousemove": 1 i1 x- l4 I8 C- p# X9 l8 V case "onmouseout":: _. k! ?/ k( S- P case "onkeypress": . \7 \2 K' J3 i0 U; n& z- I case "onkeydown": 9 P# c, x; ?% }: k, }( k+ K case "onkeyup": 6 f2 P2 D: J6 `7 w8 U case "onload": 2 \9 ~/ A9 R, k5 k case "onlosecapture": 3 `+ O+ N8 K$ D' J! d- T case "onpropertychange": 4 B$ W- \* _4 _- f# ~. p% l case "onreadystatechange":% z1 y( J9 g8 G) l) E case "onrowsdelete":" [9 t3 f$ z+ J( k2 f case "onrowenter":7 q2 ?" ^; n9 ?( r" s case "onrowexit": ! l3 ^6 [1 l% O4 w8 O% X case "onrowsinserted": C3 ^& I& z! c2 _/ c case "onstart": ' ^3 X; X. W' V% E$ h5 p case "onscroll": 2 ?7 e* {1 ?6 O case "onbeforeeditfocus":4 R( J1 H) }8 i) t+ }; c- N A; T/ t case "onactivate": 7 d' n% E2 M+ t6 M7 c2 W/ m case "onbeforedeactivate": 6 R! ?, G# m0 p# J case "ondeactivate":% v* m& f& W; B% q case "type": + k& Q4 X' V3 G5 E case "codebase": - b/ {- Z, g1 f ret.objAttrs[args] = args[i+1]; 9 o1 O* e. G* g2 j# G break;$ d- `' U1 M( u4 a, R1 @4 S2 y- p" s case "width": $ @- X5 L$ K6 C5 `& x7 Q case "height":* B* T6 f! E% f" e; M& t9 i case "align":/ G% U) f; ?2 o( i T2 R case "vspace": / O' A) ^1 L+ t: l, n- L/ A0 W8 u case "hspace": ) g. h$ d9 o8 |5 |( {9 Y5 t case "class":7 _: U" _' C) \, } case "title":' b! {# ~4 u% O6 T b case "accesskey":# f- N' H+ i9 a% L case "name":( M" i2 q# S0 B B& I case "id": 6 [+ x0 C! y* U3 G1 g! t case "tabindex": & }6 L) o. `- u2 [7 Z h" L" N ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1];6 ^, K* A# c* ]0 D1 ] break;" m! G; }# Z( I1 Q* o( t default: 1 s0 L& f2 l; v6 n) W1 ^% `- j M; o ret.embedAttrs[args] = ret.params[args] = args[i+1]; 5 z( e5 ~8 [) M } # N8 X* w2 W5 B }7 \% N; K1 U0 d$ o" { C( ? ret.objAttrs["classid"] = classid; , R8 [: Z2 l8 a* D/ n. r; Z" m if (mimeType) ret.embedAttrs["type"] = mimeType;2 c3 T$ D1 _2 M! G6 i( d return ret;; L1 W% I) w2 }6 Q8 J }% Q) z, V9 L. ?' d2 w2 {3 z$ {: H . c3 x( N. z9 K% l0 e6 p6 { 2、保存为:AC_RunActiveContent.js 6 m- @, @" P5 b: M9 ~& s% B% B; |- L. k3 K2 w 3、在所需的页面中添加; * C! d d( u0 K6 {# O9 _ w% x ; b$ k3 h, M2 _* `( M! R; k+ P<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> 4 g( T2 M( L9 h+ m J9 c& j& }& E B. [ 4、在插入FLASH的位置添加:' q# D6 h1 d' E6 K ; j% u8 h! r# u. u$ _( g, M- l0 a% }<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>, s; d2 A; l# M <noscript>& f% b. u& h7 c9 g2 a, Z <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"> # E4 t% I) E) r. x. H3 v. k& E<param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">2 i E0 _: T/ \, i. \9 u6 R <param name="quality" value="high"> _. o+ q$ B* C) F* X/ ^ <param name="wmode" value="transparent"> 8 z3 ], s3 t( 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> 7 s* z6 u3 B% d2 F- G0 Z9 N</object> L4 O/ X6 |8 F7 Q6 {; V, D3 @ </noscript> # b8 V% x/ ~4 z, C" B! s$ B3 k' \( t. L" h; D3 L$ [9 Q! u0 \ 5、页面中的完整代码: % L* @+ }, a. a8 F7 p( R0 f* |9 o1 r6 K0 u, G <html>6 Q5 o7 J4 I' Q# U! L* i <head>% c9 V8 U- B" B" A9 z <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />5 q' g; ~0 g1 L; N/ ` <title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> 2 B: {, D: |. D0 y+ B) U! F5 N<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径--> ) h& Z# c+ p+ U! l. T/ C1 N<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> , q& M; M5 I$ E4 c/ z<style type="text/css">% e; U5 W2 Z$ o <!--; @8 V3 G o. |# ^! T) L body { " j1 ?2 V% K% m+ o background-color: #CCCCCC; . ]/ F( X' o9 x( P- s}4 A% R6 C3 V' O+ b0 v --> ; t- X; Y' p% k+ Q* [& C0 N</style></head>% [; Q8 v8 R5 M6 s1 r+ s/ f <body>& m0 n U" V; Q# E: ~* V, a $ [: M; [5 Y, X: D <!--下面这段JS修改的时候要注意,一共要修改四个地方: # o- V& T/ K% x9 h2 L+ A3 H U300 是宽度; , P" K+ I! t, D3 n. u2 l3 s200 是高度; + ?3 c) Y- H/ t! q3 @( qimages/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中--> 1 E$ }! L/ |8 C" Z' o2 w<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>0 l- R, E& `; Q. b A n# f2 l1 u <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。--> y6 j( _ C" G$ S, T. ~* d- j8 t0 x<noscript>' x4 x. Q/ k! 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"> v. @- m/ J6 b M <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf">) H( r# k* z1 ^+ U1 H+ i <param name="quality" value="high">: `. Z8 c% _8 q, S! y: P <param name="wmode" value="transparent"> ! C$ M# F Z# d1 T <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>0 f. A1 ? ^+ |6 c# f4 H4 g* \2 w5 o </object>) M* k, W/ D$ j- ?8 r$ U0 m </noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!( K4 B% S" S3 H' c   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕!& k6 ]; k6 N% E8 a: b! E1 A   终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!2 `% ^& m2 o3 B, ? b! I   不敢独享,先建一个JS文件,写入以下代码:; U1 r v' v- Q' H, ], R : B+ C% E4 R; n* n1 Z3 A2 E! {8 W
  1. function al(){; _" Y. V& Z3 L$ F' k0 K2 y% F3 F% k
  2. alert('ok');8 T9 D' M0 l+ h, B M. b2 `
  3. } ( j2 M b B( F( Z1 u
  4. function AC_AddExtension(src, ext) " H' U- e* p+ D2 I# t9 R+ v
  5. { . g- s# G3 [/ E2 W
  6. if (src.indexOf('?') != -1) 7 b/ e* Y2 M3 T/ n; k/ {' F
  7. return src.replace(/\?/, ext+'?'); 1 Z# U$ d2 w5 T. |2 b$ {! |1 U/ R
  8. else) u7 r: J( @+ Z# \: U
  9. return src + ext; ( u+ A' {! V+ A% y
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) ( W: U* B0 x! C$ ?5 z
  11. { : ?; \7 x. @9 G7 [4 q% L \; ]/ B
  12. var str = '&lt;object ';2 r& @( D$ w, K _0 k7 ?: @
  13. for (var i in objAttrs)3 X Q/ c) Z5 H& e+ V6 W8 P
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';: F$ s6 N u: Z* j6 T6 v! @
  15. str += '&gt;'; . ]* |$ A+ K. h5 C4 k
  16. for (var i in params) 7 s; H% K4 c6 k& V
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; 0 |) f! }2 Z5 j9 F. {4 j+ b
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed ';& l& q O/ t. K) U6 L# y7 o
  19. for (var i in embedAttrs) 3 {. \. b h" E; h/ F. r
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; 7 `! ?2 W }0 \7 q' A4 ]
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); ' O4 p6 U0 |! J1 T5 s2 i; H
  22. }function AC_FL_RunContent(){: S! ?1 x# `. h# b- \. h
  23. var ret = ) R5 g- |) t1 G- W3 m0 ?& I# z# d
  24. AC_GetArgs 2 i4 ?3 _9 H' K0 x3 a! _) ?
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;. L6 g9 ]; d; N7 n7 F8 G
  26. , &quot;application/x-shockwave-flash&quot; 9 L* [0 F. V8 G# \& `% w2 L
  27. );1 c' a( A1 l; o! M9 s
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); % N+ W1 b0 r" K) ~5 o
  29. }function AC_SW_RunContent(){ . F5 A& u3 H$ @* \7 z, D7 v
  30. var ret = $ P2 c+ @$ Z9 b) K# {+ y
  31. AC_GetArgs . q4 {8 C: M+ y
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot;: m% r$ I: z/ S! B' a9 V( q# j* C
  33. , null 2 a$ p: R% O$ n( j' o0 t. Q! c
  34. );" T X( \3 \! [ Y' l
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); $ [* a2 C" D0 k" J0 x
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){# @9 }$ J- T5 v! Q% X ]' F2 c+ c
  37. var ret = new Object();" d7 f" V8 c! Y4 F: z
  38. ret.embedAttrs = new Object(); / \" ?8 g% L' D4 ]( E
  39. ret.params = new Object();4 Q( [8 C/ b6 K' Y) D4 [3 ^8 a
  40. ret.objAttrs = new Object();3 S; P! y3 Q3 p* s% [7 ~, E* |4 v
  41. for (var i=0; i &lt; args.length; i=i+2){% G5 ^5 B: u4 K; J# m6 o2 s x
  42. var currArg = args[i].toLowerCase(); switch (currArg){ ' y5 P9 y& ?, F& u
  43. case &quot;classid&quot;:4 j1 G7 n2 m( l/ r, ?: R
  44. break; + l* d3 J+ w: c1 c! M7 l
  45. case &quot;pluginspage&quot;:- i2 l7 h7 z. z) @( ^. n) S
  46. ret.embedAttrs[args[i]] = args[i+1];5 n. ^$ H2 M' ^( R
  47. break;8 K! ?# e% z( a* X/ ~2 |
  48. case &quot;src&quot;:! |3 X6 `2 a+ X9 U9 D
  49. case &quot;movie&quot;: c. \" A$ I, {6 a( d% {7 t; I5 }9 K
  50. args[i+1] = AC_AddExtension(args[i+1], ext); " D/ {6 m( L# m
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1];. ~ E. V4 r, N
  52. ret.params[srcParamName] = args[i+1]; 2 ~# `% Z4 l* y6 C7 K, O" N* P
  53. break;# \1 Q% \, m9 Y( \
  54. case &quot;onafterupdate&quot;:' X' c7 X$ U1 X
  55. case &quot;onbeforeupdate&quot;:6 n/ B: e/ c7 y" d/ X% @2 j+ q7 O
  56. case &quot;onblur&quot;: + ^% Z- G0 G" r/ S/ b
  57. case &quot;oncellchange&quot;:7 k' f* l: M9 b5 w6 u
  58. case &quot;onclick&quot;: - N( H' H7 [' s O0 g
  59. case &quot;ondblClick&quot;: & J, f2 ?# j7 C' w- _6 h
  60. case &quot;ondrag&quot;:: ~- K+ I3 X' R i' C
  61. case &quot;ondragend&quot;:7 W: w6 b! I8 `9 y6 z* a
  62. case &quot;ondragenter&quot;: 7 A& b' T; y7 {# y1 N+ E
  63. case &quot;ondragleave&quot;:6 [6 c( E$ N* W0 G: e8 S6 k
  64. case &quot;ondragover&quot;:7 P% \0 `' b% x: g: A) Q1 y
  65. case &quot;ondrop&quot;:3 p: y7 c W2 G! W- e1 _- K
  66. case &quot;onfinish&quot;:3 x; F! ?7 T% Q9 [
  67. case &quot;onfocus&quot;:# g1 r5 Q$ R" j/ f. h- O
  68. case &quot;onhelp&quot;:, `8 N7 t7 D& t$ t8 f ~
  69. case &quot;onmousedown&quot;:- t$ V: V( D2 c
  70. case &quot;onmouseup&quot;: ( C5 s+ b! }- w8 |) {& K7 }
  71. case &quot;onmouseover&quot;: 4 j; P" f: s% E' ^6 R. a R
  72. case &quot;onmousemove&quot;: . K" k" a1 C" H1 [" ]
  73. case &quot;onmouseout&quot;: 0 h8 v1 P* B# l+ v2 ]( \
  74. case &quot;onkeypress&quot;:3 T9 ?) r6 ~: @. w
  75. case &quot;onkeydown&quot;:& a; N5 m$ y I" T( d
  76. case &quot;onkeyup&quot;:, [- z, ?$ d6 z
  77. case &quot;onload&quot;: - E2 Y& D0 t* E- m7 d1 Z7 S3 h
  78. case &quot;onlosecapture&quot;:1 J) b- B. R: d+ n( d+ }
  79. case &quot;onpropertychange&quot;:# H8 \( r1 H% y8 R! T' d
  80. case &quot;onreadystatechange&quot;:+ k H/ k# Z1 w
  81. case &quot;onrowsdelete&quot;: 7 V: D' t, [& h a% Q+ S
  82. case &quot;onrowenter&quot;:* H% F! W- w( o. c, V! H' u
  83. case &quot;onrowexit&quot;: & L0 J ^% \* s, {0 B. k
  84. case &quot;onrowsinserted&quot;: ! g( a9 N- @9 Z! n- q( @
  85. case &quot;onstart&quot;: 0 H: A H8 Q; `
  86. case &quot;onscroll&quot;:4 F. {; _* `) A1 q& w; B0 d
  87. case &quot;onbeforeeditfocus&quot;:) z, l( l n5 A3 v9 P
  88. case &quot;onactivate&quot;:7 O- ]& t* z# k, o3 A8 L
  89. case &quot;onbeforedeactivate&quot;:: c. L( H) q5 D& W6 D/ {- P
  90. case &quot;ondeactivate&quot;: 3 G$ | F* \) v# s5 A. L8 O
  91. case &quot;type&quot;: 0 q: `8 `5 N3 W* K& r. }
  92. case &quot;codebase&quot;: 6 } U+ c( q: G# J4 k/ q
  93. ret.objAttrs[args[i]] = args[i+1]; * s7 \! s n5 h5 V7 G& `4 {2 `
  94. break; [7 v3 u: d% A4 P7 h1 A
  95. case &quot;width&quot;:& U& i# c. g! p! n, w
  96. case &quot;height&quot;: 1 |5 |# O7 b; L7 x$ y' i8 E2 v7 c
  97. case &quot;align&quot;: 7 H' o3 C6 l) L& J
  98. case &quot;vspace&quot;: 6 }' h+ o& d, Z* x) g- |
  99. case &quot;hspace&quot;: ( F# O8 h1 g1 M$ L
  100. case &quot;class&quot;: # v' H- m. r" B, u
  101. case &quot;title&quot;: 0 g8 v+ n# {& p2 F) N
  102. case &quot;accesskey&quot;: ( k' G, I, I6 s# B( `
  103. case &quot;name&quot;:; d9 Z' \( E' I2 V( U/ I; \" F
  104. case &quot;id&quot;: * Y6 n. A' L9 A& e$ ~/ a
  105. case &quot;tabindex&quot;:4 d/ ~; R# u8 a5 S Q2 }
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1]; # R$ J. ]/ W4 u
  107. break; ! w3 Q3 N. u/ i' a& a# ?. J
  108. default: $ j8 w! Y$ S; n+ E$ l
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];# M- ~7 V- b6 H# e; f. ^( L7 i, P5 N
  110. } d% L8 S4 o' `: y$ N; f1 P
  111. }& L( q: g" ~* z3 ^( T/ N" A
  112. ret.objAttrs[&quot;classid&quot;] = classid;, w& g2 X+ Z& ]2 j% c& n8 ^+ P
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;& F; S; h3 i( q1 b/ ]! |. }
  114. return ret;0 i$ i8 V/ ^$ n- e9 ?' C" @
  115. } 5 q4 d9 y& C' N
  116.   
复制代码
7 M+ ]9 ^$ c3 A1 z3 _1 I 然后在要实现这个功能的页面上,调用这个JS:) C, t3 i7 W; e9 `) Z* y " k: M- e# b2 b6 q Z7 S5 ]" _4 l
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  ! X# W: K0 e. Q6 z& |- t 9 b" y/ m; G; k' y/ P然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:+ _* M: `/ J7 Z( S# ?9 o0 { 1 B$ i) H Q2 b m8 Q( Z
  1. &lt;script type=&quot;text/javascript&quot;&gt;9 A' `" U( \ Y! Y% Z) t" ~- V
  2. AC_FL_RunContent( ( f1 ~$ d: o( G) ^+ O
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0'- [2 ~) l/ m. J
  4. ,'width','524' //FLASH文件的宽 6 P, Z3 s6 s; F9 q8 \/ z! j
  5. ,'height','55' //FLASH文件的高 3 r. R1 x( ~- H$ u7 _
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf 6 _0 m# }/ N8 ^. _( Y
  7. ,'quality','high' //FLASH文件的默认质量 g& D$ N2 o, p- g1 F7 [9 N/ r9 n3 ]
  8. ,'pluginspage'. d0 I, B0 p/ @& M( q; d# m2 O) T
  9. ,'http://www.macromedia.com/go/getflashplayer' : I1 u: W! r L9 R7 V
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 7 q! G6 g2 k6 ? Q; B9 U$ \
  11. );0 B0 e9 m1 f* }* ?
  12. &lt;/script&gt;% ]8 C! Y9 |7 z: X5 A" H7 ~
  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-4-25 05:31

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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