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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。3 w1 S8 f. i0 A1 u- S ] ( O- T3 ~: r! F1 P7 t最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。 9 c7 p$ u, R' C; \$ C7 U3 X0 p6 ?' j h7 N; [5 Z7 n+ d7 u2 _( n 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: - s f5 B! G& L- q 1 T5 h' v" w8 B+ U4 r; F/ z 新浪 (www.sina.com.cn); a9 n) H/ y0 X( E 首先在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;2 t& D, m1 z N/ i6 {4 o1 {
  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;);3 C/ A4 M$ ?) i
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;);9 L7 ^ d' y& W' D+ b
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); 6 ?6 ~8 L8 G# X# J: z" _; _
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。 7 q8 D; I$ l% O" P$ ` x' }- ^4 P" x* A1 c; \( P9 F新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 , x+ q- z, Z0 ?! J8 j$ c) i. i$ O* K3 }+ T 搜狐 (www.sohu.com)- ~: z3 _$ I* }' ~( D! e H 搜狐的手段和新浪如出一辙,首先加载: / `4 ?: A+ L" Z. k* Z $ y% b% X/ ?1 B$ v<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>, [" l5 I% X* i6 y) o4 ^ 调用:
  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;);4 p+ j( u }3 D5 k
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;);& B$ A7 G4 N8 B9 p3 H4 v0 D9 B
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);' A' Z: n( v/ h! ]. O) R, [
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);9 v1 K, x5 \, P1 |9 _
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。7 d! ~0 i2 l0 r5 x3 ^ ; _8 q3 @3 J6 F你说是搜狐抄的新浪,还是新浪抄的搜狐? ; s0 j% S, ~3 V& J9 ` u, ~4 I7 f( S9 x$ F网易 (www.163.com) 6 y/ L% s! A: k4 v* \# H, _网易就是不一样,处理手段显得很有技术性。首先加载脚本: , S5 }. l- |; P. e) Q2 m 0 b% E, R; G3 m( r! Y' S<script src="/DartRichMedia_1_03.js"></script> 9 Z' n7 r$ D: i) t9 W页面上直接用 docuemnt.write 写入 Flash 的HTML代码。 ' ]/ i$ q4 B' ]0 O% ?' n 3 Q! q; K1 r, x按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { 2 O9 X# e1 M3 f+ o% H. |) I) |/ v
  2. dclk_isDartRichMediaLoaded = true; / v) B3 A) M' ?7 @& D; s& ?# ?( M
  3. function dclkWrite(str){ . K/ g F/ Q6 R& j _
  4. if(dclk_shouldOverride) { 1 q; X) b, M" z' `) Q% |
  5. dclk_original_documentWrite(str);, w8 `7 H8 S6 f5 h* l
  6. }8 K0 u5 w. y- X$ Z2 @" ^/ v
  7. else{' [( U+ z/ h4 h# {' T
  8. document.write(str);! X3 A' c! q; S A; k
  9. } 0 y. b6 ^$ I5 M3 ^: }- e0 d. T
  10. }) `% D U+ Q- w( l9 C
  11. function dclkWriteln(str){# h6 C; } b$ L' W3 j
  12. if(dclk_shouldOverride) {2 j, V0 A$ a8 ^ O
  13. dclk_original_documentWriteLn(str);0 c4 N3 T- N N, j
  14. } 7 j+ R c0 x5 q; R
  15. else{ & l- K( Y9 A; W. X
  16. document.writeln(str);8 M& t; B. z5 E8 E8 S
  17. }/ v6 f9 _3 G# \- w% f( K+ B
  18. }& ]! [5 q; ?+ O! C8 I$ s
  19. function dclk_isInternetExplorer() { ! x: a5 [/ Q; A1 s( _2 @, c' \
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0);' v d% h. C$ {3 m! M3 m, m
  21. } 9 Y* [2 g6 j b- i) B2 @
  22. dclk_shouldOverride = dclk_isInternetExplorer(); 1 ~; ?% d2 b7 j. o
  23. if(dclk_shouldOverride) {8 ]1 i2 P% G$ U
  24. dclk_original_documentWrite = document.write; ) z1 h) `- o4 Y8 A! _; c
  25. dclk_original_documentWriteLn = document.writeln; $ h" V$ O' T7 W/ ~) b! o6 f; \) [
  26. document.write = dclkWrite;# [ Q* `7 B4 D
  27. document.writeln = dclkWriteln; / M; `2 s, v0 [% `0 s
  28. }3 a+ t. U8 }' @. d
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 5 M \. j* r4 w5 [7 Q" j4 N1 { n1 E0 _8 B# X8 g4 Q1 c 雅虎中国 (cn.yahoo.com) * v$ _$ t. A* dYahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 - o6 z/ j8 U* Y$ t ! P4 h5 ^: z4 a1 F8 S' ?7 O腾讯 (www.qq.com) / O8 [3 M7 O6 [2 `默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。 # b' k5 | w2 f. x4 v + i9 p# _/ n& U z- }7 o9 o1 e% C! Q$ p. R* R1 _: v5 f& t5 p * f% O) M* F3 P/ r, e. [6 ~ 稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 , _. ^) v. u; O8 R& h2 I6 _! }% k( g* [ D* k2 G5 C, P) E 使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 0 v } }/ [# V# a9 K) y! h, Y + Y3 |! N! J! \1 k2 U6 H网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: 4 t, i8 [9 Q" m/ T' P : e4 h6 E1 n* w+ E//只要在 </body> 后面加上一行 3 A4 m( s, y) _ <script src="javascript:'document.body.innerHTML+=''';"></script> 5 X# J) ^8 W7 S" O& \* X/ d$ G真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

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

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。7 s' l( h! f" q& ]) o & R9 a* V+ N& [6 p5 T5 Q 当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: ' `# b) E% l+ z/ C ) |7 X8 ]4 F9 O: h1、新建JS文件:7 y; I. f" U# e6 B / ?+ E* J: D/ [, `5 v+ m N//v1.03 B0 N5 M+ ]1 s$ x* R; f //Copyright 2006 Adobe Systems, Inc. All rights reserved. 5 Y7 S. i+ A# m1 @9 I2 G# Pfunction AC_AddExtension(src, ext)( i& z6 x7 ~, v/ N2 e5 X {0 L$ T% T2 L* |0 e8 U9 A- }; I. J if (src.indexOf('?') != -1) $ {. d# A: N0 S$ y8 R return src.replace(/\?/, ext+'?'); + r: M9 c( E4 z0 z- s, |2 ^, Z4 v else 9 C! d5 ?' N2 Z% I, [; p/ m& d return src + ext; + p# m" H: P. H9 A5 v, f} % s1 H4 H! N7 C. a+ d4 K+ M# V' j8 B. c; h, E function AC_Generateobj(objAttrs, params, embedAttrs) h* h2 V2 b. U3 u8 n; {{ * B# ~" A9 D P$ S( u4 b var str = '<object ';# O( h0 O9 P# x( z* v- J+ ` for (var i in objAttrs)0 {( R y) j, R$ G! h str += i + '="' + objAttrs + '" '; $ Z, o& F0 O1 k4 l! t. _3 L0 r str += '>'; 5 [# p0 h# P: R3 ]3 {8 w4 ^ for (var i in params) X9 z4 W+ ]0 c3 l$ \3 s, ] str += '<param name="' + i + '" value="' + params + '" /> '; ; [ @0 S- M) p( G4 c str += '<embed '; $ E+ _! O3 U! \+ M8 z) m for (var i in embedAttrs) % X9 |; C3 v3 h& [. f str += i + '="' + embedAttrs + '" '; 8 N, S4 v- ^# z) H3 K str += ' ></embed></object>';! z( ~+ Y, j) a$ Y% u/ | - Z; Q( g; G6 ~9 r4 r9 B document.write(str); * t' r9 o+ q" B& T}/ Y6 m) F& F$ [" W + ` m7 x; j; [: [; kfunction AC_FL_RunContent(){ 1 L7 ]0 V4 _0 L& z" j var ret = 4 Z7 m r8 q \3 u0 Q2 x1 ~# L AC_GetArgs ' L+ T4 \" x: Z% p( P ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" S/ w/ j- |; E$ A! n , "application/x-shockwave-flash" + P0 i8 ?- I0 R6 R ^$ a8 M2 q0 W. | );7 |- Q: g6 u$ c; }2 D AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 9 A& v. X8 O2 {' x6 u& W6 H$ y `} - b- J9 b. Y' u9 e3 a5 W2 w6 F$ r } function AC_SW_RunContent(){3 t. Z7 g- n P! V6 @% U. e q var ret = 8 M# i5 X9 H. [- g AC_GetArgs ( [5 S2 r/ f( C9 h ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"7 g! w. G: i+ U, q* \3 U' v , null# F$ w& i4 i: u' ~& e ); L, M6 z$ k3 T AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 8 @8 g" O* u, L' q} & ~' k* j5 e' _- F1 e c B! f3 T1 F6 x4 @5 t6 ? function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ - k4 m6 v% p5 u! _4 u& ^$ O var ret = new Object();" s4 \5 f5 w, G2 J" N. V. l# { ret.embedAttrs = new Object(); # f0 ^4 x: F! r* d2 @/ s ret.params = new Object(); 7 h$ B& C3 d# w6 h) G ret.objAttrs = new Object(); / I8 x- q' L& e for (var i=0; i < args.length; i=i+2){ 3 v6 @7 a3 p! l# Z2 ]- y var currArg = args.toLowerCase(); ' d0 r0 H8 j6 i6 e3 d) c- Q& R% \ " s( H+ z/ ?7 O2 ` switch (currArg){ . t8 @& L3 B$ u$ [ case "classid":% z( U! R; B E, W! S5 |# d break;" G8 p% L- v4 p% d$ ~ case "pluginspage":" J0 v, W* k. G1 y9 k ret.embedAttrs[args] = args[i+1]; ( \3 F! r' J& S Q- J break;7 b- x: J, }+ D3 ]# E case "src":. i: U# \ }, B* d0 M case "movie": # N5 N7 } d8 k0 B args[i+1] = AC_AddExtension(args[i+1], ext); : |7 k5 u$ m* H% f9 p ret.embedAttrs["src"] = args[i+1]; ) J( V4 [0 H( y. Y7 _2 t* M ret.params[srcParamName] = args[i+1];3 d) d2 G v- [3 I break;" f- n/ d5 W# h- c) I | case "onafterupdate":% T$ M7 g' p* @4 X case "onbeforeupdate":) [; h2 e; d% A) K case "onblur":, {+ d, o! E3 [ case "oncellchange":. V! e' h8 O9 X! i case "onclick":0 w/ ]. W. L" b/ J case "ondblClick":: M6 I. H) e+ Y case "ondrag": 6 K9 F) M0 `& J8 G7 \ case "ondragend":: V1 E9 _) Q$ G4 H4 l# d case "ondragenter":& v5 ^! e; i; M. n+ U- e* h, e case "ondragleave":# G$ k: Q0 t' V, n7 ]) ] _) t case "ondragover":( F2 h2 k! \" Y" Q( Q/ s case "ondrop":* _: |8 |) `3 A2 c$ W+ K case "onfinish":+ b$ H3 t% t2 U7 |# ~ case "onfocus": # p# b+ R# R( @, X) F. P case "onhelp": d3 ^( W" ^# B7 H. M case "onmousedown": ! A% P( f. y# b( C9 l case "onmouseup":1 X: N0 o5 n* [- J! A, @ case "onmouseover": . w, e# F, p8 q' n8 h0 T case "onmousemove": T- ?4 n# h! `/ ~9 L$ r0 a. t case "onmouseout":. W3 y; b! m& F4 {' N5 e: P, C4 k* h case "onkeypress": 2 U, j" }, I9 I9 K' h* h case "onkeydown":& q! Q% B8 u$ m; J; H7 j6 ^4 u: E case "onkeyup":& u8 O/ j; [+ u4 T5 ]0 w; @ case "onload":( e! \! [9 @- E9 c2 Z N case "onlosecapture":5 R# D' l& t2 o9 r( F/ ` case "onpropertychange":7 J- t8 O# n2 C( L' o3 ^ case "onreadystatechange":7 i8 C: q8 x0 A0 f case "onrowsdelete": 2 b6 g. O; n, A' E+ m; Y9 t case "onrowenter": / s# d% y* R" Y( k/ K- F6 e# V- p case "onrowexit":& M3 ?" ^3 N' u3 z* K, Y. j1 N case "onrowsinserted":2 p& A3 ?" y, }* b0 L% L case "onstart": . p$ Z \8 L4 M% t1 \! f case "onscroll":2 }, J! X( q2 f! o; p$ N& k- ~ case "onbeforeeditfocus":* K' O' h1 F* k( T, D( h case "onactivate":8 d3 Q4 R4 s1 R) P case "onbeforedeactivate":2 L% K u# ` x c( { case "ondeactivate":, D _ f& }) j8 ~; D$ t, p case "type":; T$ u) e; j; n' n$ C; R0 h, N case "codebase":* g; B y: r* _& {4 }5 m ret.objAttrs[args] = args[i+1];; |+ t1 F+ \ @# z% I F. ~ break;7 B" ]; x. s8 F- R case "width":8 Z$ P% z1 Q3 a case "height": ' ]% e4 w& e* \. r- p case "align":& L V" o$ H7 b$ l2 p- s" x" x case "vspace": $ f, j8 P z5 H case "hspace": ; ]0 `) c1 M2 u1 ^ case "class":* M% R) n6 i3 ^. [2 ?! s: L case "title":7 l- d* f% `, f; |6 j- l Y case "accesskey":9 ?! z0 n5 b [, E# j8 F( h case "name": # y9 t' {- _. N: Y) j$ f" x case "id": 5 F7 Y) b8 s. C: \' x case "tabindex": ) s( R) B# l' ^* {1 e ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; 9 U) Q6 |/ t+ P1 r3 p break;2 k+ k- k/ q8 D6 a2 B default:) |" d+ s7 W7 P! q0 S' w ret.embedAttrs[args] = ret.params[args] = args[i+1]; u. I* ^0 M+ D9 J$ v1 [ }' M w2 u6 Q5 X; B- K. R6 w8 I } + X6 F7 b& }; u% }& F% A9 c ret.objAttrs["classid"] = classid;: b2 k% x4 l" }# G0 Z. V/ C7 ~: ~. P if (mimeType) ret.embedAttrs["type"] = mimeType;' H! r1 f" y. \: v return ret;/ k: c3 s9 J9 J# e( w } % B: b8 @- _+ U% \6 d1 H8 g* w2 Y$ j; I( `4 _- j; _7 ~4 I 2、保存为:AC_RunActiveContent.js5 j2 i! M( j& H7 B, \/ w. c , g$ {! G' r9 o; i2 }8 e$ x8 H8 z5 y3、在所需的页面中添加; * O$ z0 Q+ _* T A2 s4 u5 c v / A, a, O5 L8 ?: f8 J<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>9 S$ b, l/ X- r% h 2 w% F+ c5 o$ L G! s4、在插入FLASH的位置添加:! d: W0 i/ P7 Z& D# T 9 Z' c# U- b3 M% T \/ M/ b<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> , F. ^# t0 v. x! C<noscript> 8 |+ A$ y- r3 K9 S+ ]) W<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1002" height="600">% G- @% M' B; f( q: b$ _ <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">: X( p o& t/ t <param name="quality" value="high"> 0 |0 O5 q% e6 b5 k<param name="wmode" value="transparent"> - P: W. z& d/ T O5 }5 t5 D. ~<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> " _ {+ Z& x! d7 ?! o1 w</object>3 a ^, k2 z7 p; T0 z+ m1 S </noscript>4 v7 }- ?2 I, q. ^% t6 {7 ~7 Q $ O& `- q: S+ R- a 5、页面中的完整代码: ) Z; M! I* S% l1 v5 r2 l, l# k% L1 C9 [& j! a% v/ V <html>) I! d% M' [* C9 W2 w t( } <head># C; |; n" z" o" N <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> , p/ u7 P' _4 F* j0 \<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> 6 S5 B5 ~, a0 H<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径--> # M% ]; i5 {' y: e' \<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>& a& `( e' A/ j/ C <style type="text/css">6 v9 g; j+ s; D1 \ k <!-- 0 d. \$ p7 I/ F! M: M S/ [! ~body { ( {; O0 E6 u4 F2 [) \ background-color: #CCCCCC; . w3 G. H) E, r( Z, s2 }8 j}9 }9 k0 R! r* B) ~0 S+ l --> " B: O5 ]) B/ u4 n</style></head>$ _0 E/ i4 O% O8 B" J5 ~ L <body> W. r2 u z8 {( @$ w 4 k% x. M+ h; k' R! C# U! w <!--下面这段JS修改的时候要注意,一共要修改四个地方:5 W2 m; n( x' V! C- c) f 300 是宽度; 2 A* w v4 C7 B200 是高度;% b- @! O& w7 V V2 q3 J images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->6 n' M" k) w# n7 D <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>; Z% g! w1 e7 l+ C0 f <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。-->+ R# _/ j" h4 I7 t <noscript> 9 }1 f7 y% N" d<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"> - |" D% M9 B4 y: R1 o <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> - L) i! p" N* X5 D0 [4 Y, L <param name="quality" value="high">8 N) a. `8 P8 t+ W <param name="wmode" value="transparent"> 7 s; u9 v+ t8 z0 A5 m7 u* u4 \0 N <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> 8 p$ [ L0 W& A</object> + d1 t& {6 A* [* ]- v) b; K5 U</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!- u+ @3 A d( `* ?; f( _. Y( n/ O4 Y g   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕!- E2 {& e, ~5 [! U& i6 f" g   终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!$ J% U& C- S' H9 x' n   不敢独享,先建一个JS文件,写入以下代码: * \* \; ~0 P7 G2 R, G % n( [, O$ x6 E' O E& q |
  1. function al(){ ( J) |% _8 e7 w) P# H: B& q3 F
  2. alert('ok'); + ]$ p3 Y8 t$ h; N/ X( ~- H' Y- s) ~
  3. }7 T d! Q) U" a. m
  4. function AC_AddExtension(src, ext)2 C4 ]; c3 D7 g! w; }7 @
  5. {- H0 ?+ {) \& n+ S9 T
  6. if (src.indexOf('?') != -1) ! R* h/ k8 D) |+ C! P% \
  7. return src.replace(/\?/, ext+'?'); + D8 j w9 l/ c3 ?1 j! e. z
  8. else : t' A: n G* l5 ]
  9. return src + ext;5 }/ _% T) M! w. V( n' Z0 \
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) 2 o) H: M( ?- [( b, V
  11. { 9 M3 Z- ~# t, @/ l8 w3 X% k
  12. var str = '&lt;object '; % i9 T) G* C k* N, `
  13. for (var i in objAttrs)6 u9 C+ ^# f3 G" T0 C
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';1 V" Y. a+ R3 C. |% T
  15. str += '&gt;'; ; U9 D9 B: G& b. I. U" R! U3 [
  16. for (var i in params). V# c2 ], R1 l
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; ';7 Z+ }2 @1 D" ?6 P6 U
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed ';) G% @! E. Q0 V6 y
  19. for (var i in embedAttrs)8 F3 _) f) ~4 A8 ^
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; ';5 `2 ]4 A7 K/ J- @! S" P
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); 0 }5 z, v" T. B9 z) {* k
  22. }function AC_FL_RunContent(){ . K: ~6 i) p9 P; `: {* t; X. _# L
  23. var ret = / l/ m) F" Y) L% m- r) Z
  24. AC_GetArgs / h, E$ R4 D1 K4 x# F; {
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;8 K4 p) K! p: t% c
  26. , &quot;application/x-shockwave-flash&quot; 9 d, b% Q7 \' r4 ~& x7 ~/ e
  27. ); 2 o2 s4 A% A+ t: r: W7 m
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);# K% ~! G6 ~$ f% V- `9 g% u- Y
  29. }function AC_SW_RunContent(){( N5 A2 w- z6 f
  30. var ret = + `" X/ p- n% h
  31. AC_GetArgs 9 ?& J$ ?3 O+ M& j1 P+ v- Z7 f
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot;0 t: h2 X& z& x |' r
  33. , null 9 W, P$ k. x, o9 i0 y
  34. ); 5 ]7 K$ O4 F$ m* q
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);( l* Z9 E& z! L+ r9 _
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){# P3 r* ~5 y( {. x
  37. var ret = new Object();" |2 g0 u$ h6 j `% b9 `4 d
  38. ret.embedAttrs = new Object();+ D( F2 @4 i# T6 w V, }% x
  39. ret.params = new Object();/ P; ]! E6 ]4 `! |. d
  40. ret.objAttrs = new Object();) Q: a0 H& F1 P9 W7 O
  41. for (var i=0; i &lt; args.length; i=i+2){- U( T4 T$ F) `% }" C# Z" R
  42. var currArg = args[i].toLowerCase(); switch (currArg){ ! @/ P( ^- s( e" U' c, \" K
  43. case &quot;classid&quot;:" l( x* N+ I* v
  44. break; 2 S, H/ B, ?9 n- Y6 ?) B. F
  45. case &quot;pluginspage&quot;: 5 h$ ~5 X( D: Q3 i- |! V, U+ }; T
  46. ret.embedAttrs[args[i]] = args[i+1];. z D W6 X- P: A6 l- [' |
  47. break;+ Q9 N* \) l' y& c/ `5 C
  48. case &quot;src&quot;: ) V" |" o6 p: K9 S6 K0 }' x
  49. case &quot;movie&quot;: + q/ b& r* f# r1 f; h% p/ n
  50. args[i+1] = AC_AddExtension(args[i+1], ext); 9 z% ?0 e$ _3 J3 \* V4 i
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1]; 9 E% g" [% I. `, o5 v/ }0 Y
  52. ret.params[srcParamName] = args[i+1];$ r2 k6 ]+ j& z9 Z8 o
  53. break; ; R3 e( J: y# _8 e% }1 Q
  54. case &quot;onafterupdate&quot;: & S$ H. G6 P+ C, F8 |1 j
  55. case &quot;onbeforeupdate&quot;:, ]* Y! F% d3 ]8 R
  56. case &quot;onblur&quot;: 3 }' k; ~- }9 T4 U4 p: I; j1 d, k) o1 E
  57. case &quot;oncellchange&quot;: 9 ]. o6 {/ d S
  58. case &quot;onclick&quot;:0 m4 ~+ H( a; c( s$ K5 \
  59. case &quot;ondblClick&quot;:( ]- B7 O2 R+ F( p7 I7 |3 }
  60. case &quot;ondrag&quot;: : x4 O% T2 F0 M" k! ]; I
  61. case &quot;ondragend&quot;:2 g( T" g. X$ a* l0 r: p# X$ z
  62. case &quot;ondragenter&quot;: % f8 D; C; _ |
  63. case &quot;ondragleave&quot;:" w' J( z2 G: t/ ]* d( F
  64. case &quot;ondragover&quot;: / [9 V) @7 |5 U' }6 T
  65. case &quot;ondrop&quot;:/ Q% e& A% L3 D, g& d8 @+ D" P
  66. case &quot;onfinish&quot;:7 a* \/ g$ p, l6 @- ^
  67. case &quot;onfocus&quot;: 5 L1 C+ u2 l: K8 u% G4 D* U# X
  68. case &quot;onhelp&quot;:% S# p- j9 R: V: B
  69. case &quot;onmousedown&quot;: 9 D' z6 R6 f( H5 T
  70. case &quot;onmouseup&quot;:) A) [* z2 P. R
  71. case &quot;onmouseover&quot;:, M* q3 ]* R: D; x1 f' h: B
  72. case &quot;onmousemove&quot;: 7 `+ g3 Q8 m0 w0 f( k
  73. case &quot;onmouseout&quot;:) `5 O0 K/ W/ F
  74. case &quot;onkeypress&quot;:: r3 b2 X+ {3 {
  75. case &quot;onkeydown&quot;: / H( F7 H3 W+ a$ t1 E: @2 J! `. W6 V
  76. case &quot;onkeyup&quot;:( b8 u5 B$ v9 T! z
  77. case &quot;onload&quot;:; I6 c" i; E' l2 N
  78. case &quot;onlosecapture&quot;: 8 t( a) A; W: I$ `% G* z1 u4 \+ }
  79. case &quot;onpropertychange&quot;:) g! ^9 B% F$ V' P. I
  80. case &quot;onreadystatechange&quot;: & y6 i; l% j9 E6 f
  81. case &quot;onrowsdelete&quot;:" T/ Q! ]; w( ?6 H) [! ?- ]1 s: ~+ h
  82. case &quot;onrowenter&quot;:! R/ ]% I9 w% F) V ?
  83. case &quot;onrowexit&quot;: - R/ P9 C* I! l% p0 `5 ^: `
  84. case &quot;onrowsinserted&quot;:0 `" M; H# s6 Z
  85. case &quot;onstart&quot;:. }2 K; L. D; T9 ?9 O
  86. case &quot;onscroll&quot;: ; i0 ~" U% q+ Y
  87. case &quot;onbeforeeditfocus&quot;:2 i2 b: f+ e; r- a+ R" O
  88. case &quot;onactivate&quot;: . a. k# b1 }5 q5 {7 p" u
  89. case &quot;onbeforedeactivate&quot;:, c% ~$ U! b8 F2 t
  90. case &quot;ondeactivate&quot;: 5 Q3 k- j( m7 E: q
  91. case &quot;type&quot;:! p0 O% B; V3 v- J) f
  92. case &quot;codebase&quot;: ! K1 N( j4 f" ]5 b, y6 L+ q1 y, l
  93. ret.objAttrs[args[i]] = args[i+1];& h! f2 i* e3 [( w
  94. break;4 G7 n7 [0 g' o4 i
  95. case &quot;width&quot;:0 X! |4 W& F: @ X! y5 l; T
  96. case &quot;height&quot;:8 U+ k9 Z2 X) n; O( D) q
  97. case &quot;align&quot;: 9 o. M, c$ `/ x3 z. P
  98. case &quot;vspace&quot;: ; h3 u6 f) _0 `7 ]$ ^% h
  99. case &quot;hspace&quot;:( x, [' U9 h% I* H3 c% X
  100. case &quot;class&quot;:# P/ J& |' Q- _! V
  101. case &quot;title&quot;: ( d8 Y7 Q7 x( A' L
  102. case &quot;accesskey&quot;:+ T9 V! _3 y# u, H. U1 b
  103. case &quot;name&quot;: 8 o7 k# g9 \3 G! Q0 u
  104. case &quot;id&quot;: 5 G7 E# t" a' h' z, |
  105. case &quot;tabindex&quot;: + x9 V8 o. Z/ \/ B7 X0 b
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];% }6 r6 d' e* q. F
  107. break; 8 k! h. h8 s. z0 \( o) H
  108. default: 6 T d! X( \) K& b8 F
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1]; : t, D( e* Q- O+ k( A4 w9 [+ A
  110. } # f" S9 e8 c( v
  111. }1 b4 G, z# j( B- O
  112. ret.objAttrs[&quot;classid&quot;] = classid; ) c& v( t. z% M8 a4 C
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;# r9 D4 Q% X% O! k
  114. return ret; . X6 U4 p5 F. y
  115. } * M3 X" G) s8 A3 _# W* K8 @
  116.   
复制代码
$ P* ?3 J% q1 V/ s _9 r 然后在要实现这个功能的页面上,调用这个JS: 1 a4 s' w% C+ n# S" `) K1 p, S$ q6 q, J
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  " p9 [: C! V5 L: e2 H" B% w : ^6 } e1 S5 c3 f 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码: 6 m. U3 _; t' H2 G7 s" x- B1 p$ [$ `1 g. ]: I6 k, ]
  1. &lt;script type=&quot;text/javascript&quot;&gt;* X' m ~; Q2 f0 C& s- Z5 F
  2. AC_FL_RunContent( 5 I$ A* ^, A) N2 l
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' - t/ ?0 w: J! \: M5 I1 N; a
  4. ,'width','524' //FLASH文件的宽% ~6 ?) f' c% t9 V
  5. ,'height','55' //FLASH文件的高 5 V2 i Z3 W6 X, ^5 M- Y7 k( |
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf$ [4 {, s- ?7 e D! B6 f
  7. ,'quality','high' //FLASH文件的默认质量 ) \: y$ t9 e8 u
  8. ,'pluginspage' 7 X( |& _% r. d) M1 d
  9. ,'http://www.macromedia.com/go/getflashplayer'$ n8 }9 k3 W D! [8 B9 x& @6 L
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样0 W" i0 u4 N8 R# H; A+ B9 L @
  11. ); R- Y* Z8 V x5 ~# |- Q# e- s
  12. &lt;/script&gt;& I: l" R* k Q1 B% @
  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 08:10

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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