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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。 * G$ H; s; R( ]! u/ b [- g7 U2 V. {5 r4 \ 最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。 9 S9 L- V# |0 i3 Q; t. t8 A# P6 x! _- ?- n- P 今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: 2 w4 G! P T1 A7 B7 M. C ; S% h ]; h0 W; Q新浪 (www.sina.com.cn) 2 I b% q6 w# N9 f# {; t! i首先在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;* Z6 r; f! _; g: h& T
  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;);/ r7 X6 q( @; N, @
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); 1 x- l7 u8 r& F' y0 }
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); + u4 W* ^9 L/ E/ P6 O$ ~9 C
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。! A7 d* H" h3 Y& p, u 1 q6 m/ W* P+ H' n" n 新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 . Q. M1 I# S4 p& d - I( Y( n* F9 s: t4 x' L' C搜狐 (www.sohu.com)! s, i" x% T: i/ j; j) d! n 搜狐的手段和新浪如出一辙,首先加载: 8 g# N$ g) h5 g* K" v4 ` c1 H 3 P0 s8 J& b1 g+ s0 e( c2 |$ t1 \ <script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>' g* b8 [" H7 U" |* ?/ o- ?# v" h 调用:
  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& _5 s& o9 k$ l
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;);: J$ N# N N& X" a
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;); % ~: A1 L' @( f; A5 l
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;);, A6 f; i( Q! O' W+ d7 j5 P. N
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。9 A! l( h) \6 D% y2 j 3 o8 v+ X7 J4 H1 T ]$ t( ?% o- {2 e 你说是搜狐抄的新浪,还是新浪抄的搜狐? ' ]. Q7 m/ x4 b7 @* k7 `' M0 K " \6 \, ^! D5 L! g 网易 (www.163.com) ; q Y5 l& s$ n3 ]6 B网易就是不一样,处理手段显得很有技术性。首先加载脚本: 5 B: V, f7 B' l j ; A1 ]/ k& ]. Z Q7 V<script src="/DartRichMedia_1_03.js"></script> 0 O* Q* c5 u4 Z: ~0 g页面上直接用 docuemnt.write 写入 Flash 的HTML代码。! c1 d& F7 _' W$ d# M/ j* ^ * ~( w$ d3 {- p) U4 T. ]4 J 按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { n& J( M2 p8 X% H- T r
  2. dclk_isDartRichMediaLoaded = true;4 t: t2 F+ |$ j5 u; }+ t
  3. function dclkWrite(str){ ! z n5 r$ E, z/ C4 K( @; o
  4. if(dclk_shouldOverride) { 9 S9 q& E6 b Y% [* u w! X9 @/ p
  5. dclk_original_documentWrite(str); : |/ {# T$ e% E; }& J' h
  6. } ! b4 ]# T/ r5 S I" [; d- c
  7. else{# R3 M9 [) C' J5 B& a ^
  8. document.write(str); $ A3 A. I M$ |, w: ?
  9. } 5 @6 n% m9 j# z* y) x5 Y
  10. }8 ~) E6 D3 b- Z& x4 Y/ t
  11. function dclkWriteln(str){ * Q1 D9 h# {# a& [$ Z
  12. if(dclk_shouldOverride) {5 O( `+ ]* `/ f3 R) t
  13. dclk_original_documentWriteLn(str);7 f: Z" q4 b% N* \1 N" I
  14. } j& T8 c; O; ^ k0 p4 b9 O
  15. else{8 G; i) E9 X. ]" F% j
  16. document.writeln(str);/ C# A2 `5 k: P
  17. }# C2 c' W/ x( b5 `2 N, p7 Q
  18. } e7 o4 U8 N% v$ B* y/ T. w
  19. function dclk_isInternetExplorer() { * T* F0 P, E3 h* ^4 j" s: U
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0);7 J3 ]# R! D; K
  21. }! m" C' W2 x+ ^+ U. Y; X
  22. dclk_shouldOverride = dclk_isInternetExplorer();) Z6 J) g% o8 h
  23. if(dclk_shouldOverride) { 1 M: e9 K2 F5 A7 `4 X+ E
  24. dclk_original_documentWrite = document.write; * L+ ?( M$ b8 v
  25. dclk_original_documentWriteLn = document.writeln; ) G4 q8 K7 t5 C" r5 C8 r
  26. document.write = dclkWrite; 7 D0 I; t( K; D+ v! s
  27. document.writeln = dclkWriteln; , V1 l9 J2 Z t9 B, F
  28. } / h' x: a( B( f" g& D! @
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 : F" \' l: `1 e6 W. Q0 i & W# e6 B, C0 }$ [( ~# v& t U雅虎中国 (cn.yahoo.com)7 ?) m" H5 B: j Yahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 & N& U! V3 S, a. i) t* C " n9 j$ J! A4 Y; \ 腾讯 (www.qq.com)" V+ F! u8 R3 k2 i0 ~ 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。 9 d. ~ S' V. z! J2 ` - p/ Q7 c y" ?# l( F! f8 {5 n6 c: N8 u) s; @ m) s 1 R+ u! k' x5 c8 v1 @) {+ z' e- N 5 m# o+ { ?6 r. R1 Q6 E5 M稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 7 d4 t! C- ?. P5 Z( { # b2 l; f d+ Y: ]# I5 W使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。 % b6 F8 L# }7 X) ]8 r$ ]2 ^2 y8 }3 l 网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: & S$ Z% a" }" R6 Z) ^- s4 k5 @ & E) \* m0 p( V( r8 } //只要在 </body> 后面加上一行 i6 t+ I- ]' X- Y<script src="javascript:'document.body.innerHTML+=''';"></script> j- `6 x0 r5 n1 q5 a- `, M 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。 3 ~1 a+ H3 T) x j6 \* a; o- B Z+ |我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。 & Q& q" Y7 N4 V" r; d 4 k% x* k3 a6 e网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。, D3 S9 B# I0 d* t; a# |5 r ( `) W2 E4 t3 B1 R$ h可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。 8 i" p5 Q* u1 e% a/ Q4 N9 i. `* ~, [9 ~6 J" @5 m5 `# C6 l 一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。 . a0 N! _) y, J2 ]# ? E& v9 \1 |3 h9 m6 Q% j; M5 H& A# c ObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。 ' T e l1 l0 G O* p" y$ p5 v9 m ! k' C% K$ s5 R! m' c最新的ObjectWrap 可以从这里下载。4 ]; X' W" [# j 5 G$ a/ Q8 P! V- _: R6 i% F# J 原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。 ) z- A- U7 I/ P* i* j- z5 ^( ~ , z% H! I: Q6 d7 S至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。/ f+ P, m: A j( @5 R6 M ( B6 B. W, }. K0 Y' @) w最后向ObjectWrap的作者 Karina Steffens 致敬!0 R" I9 P( l8 e+ B' Z+ e * D4 F6 L9 L( 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出现激活框“单击以激活并使用此控件”的解决方法。* N2 {4 s* ?" _' o' r % R: B+ I5 \6 ^' r% G+ u当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法: 5 F% f+ w6 M3 \. U! D0 f$ d, f5 G & N/ I( x* j8 z1 }+ x" ]; i1、新建JS文件: 1 N' O+ j4 g' i 8 n6 H4 R F* {# D- Q/ V* S//v1.0# J& @& e# b/ w4 S- Q //Copyright 2006 Adobe Systems, Inc. All rights reserved. " B! U* y+ C) l2 z' a$ N; Ofunction AC_AddExtension(src, ext)/ j; E- Z, y$ a l7 Z {4 v& k" y- a7 f8 _, k if (src.indexOf('?') != -1)( O" I3 M, U! \- \$ {/ Q$ T6 I5 ?$ s return src.replace(/\?/, ext+'?'); & w0 D* T4 X7 x& V" L, f3 i else8 t) \' k. J' X, [) o. k return src + ext;4 \6 r: x2 l/ M s( H } 4 G( I: i- ]% L% P L. d 4 H2 F6 t; i; ?. Z, gfunction AC_Generateobj(objAttrs, params, embedAttrs) % _0 X/ `4 d) D' b7 L { 5 |5 H* r7 \7 A, G# ]4 e, c3 `. h var str = '<object ';" \9 Q/ y! S: h# A8 i3 T5 f' ~ for (var i in objAttrs) " T/ u& g/ ~5 `% P str += i + '="' + objAttrs + '" ';( E, T1 B$ X$ j" w7 W' x' P- G str += '>'; : B* T' ?: m0 W! n8 [ for (var i in params)' b4 a& X1 [8 k& E' y0 [& x0 F str += '<param name="' + i + '" value="' + params + '" /> '; o" K- D. e1 o6 | str += '<embed '; d( ~ m7 g+ ]! V# f9 C! E7 p2 H/ p for (var i in embedAttrs)- G# L( } T. [7 K str += i + '="' + embedAttrs + '" ';: x S8 V1 C& x6 m% [ str += ' ></embed></object>'; $ Z2 U7 N Y6 I- I . l/ @/ I( B- o2 B$ J f- o document.write(str);' \" M1 Z( {, i6 M: Q3 o6 `1 D3 } } ' P( M! I5 T$ M6 E" Q/ J0 F/ `- i7 D; k: N" \* u- o& A function AC_FL_RunContent(){ , m. i" y6 d8 k9 r+ T+ W2 k var ret = * i6 a$ M+ ~: z1 } AC_GetArgs # _4 }" a4 _) @7 _6 x% W ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" - z% K. n- t5 k3 M! ] , "application/x-shockwave-flash"/ ]3 J7 S8 I1 ]) i/ x" p# A ); , t( `, r/ U' ~3 O1 L AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);# R6 L; P- J' r' ?9 x# Y } 8 `$ E% H+ B2 w4 n5 J - A7 h5 p3 n/ Y: n$ |function AC_SW_RunContent(){ + S% A S% Q* r( z' e9 P var ret = ( G8 h8 ^5 B1 u) e6 i AC_GetArgs 3 e: l1 u9 H- _ ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" - f: H7 X I! y: J5 b , null) d& _/ B4 A- [6 j; O3 f ); - A2 e( l+ Z& y( | AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);: g2 \# {0 d; p/ T1 B0 f% r" a } ; a# i" t) s" X5 d! }4 ^* j5 c! ~8 B+ A! t: E, ~ function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ ' s0 Y: @* u: E$ a3 r$ a. @ var ret = new Object(); 9 s" _6 _) o( C1 k8 D) H ret.embedAttrs = new Object();1 s4 v2 u# [9 n, q ret.params = new Object();: S4 ^7 E7 b- _ M/ v4 T* M" @ ret.objAttrs = new Object(); 8 a2 T+ j$ J/ [0 O, _0 n3 h for (var i=0; i < args.length; i=i+2){ ) L3 c& \; K- b2 l1 o+ i var currArg = args.toLowerCase(); ! c+ B. {/ L2 N: X$ S3 k; s 9 s- @3 ]' o) U) K$ W) J B$ [ switch (currArg){ 6 y( n& W$ Q) x case "classid":% a( }2 j2 y! C& l break;5 q$ f1 O& o3 ?9 B8 l case "pluginspage":6 _/ c$ G% {4 R, D6 P6 `( [; z ret.embedAttrs[args] = args[i+1]; 5 F0 E1 E, d- y# m" V break;/ j! h) }9 d/ y: }( z" k case "src":& u8 U; A" E; u2 _$ e2 o7 z i- {5 o case "movie": . ~ G6 l+ I3 a& \ args[i+1] = AC_AddExtension(args[i+1], ext); ! J3 l& F# @# n. O h ret.embedAttrs["src"] = args[i+1];; F6 f- j' g' W# U ret.params[srcParamName] = args[i+1]; 7 W/ W, j9 ]2 B9 a" R break; - E8 h+ m( m- O4 J9 V9 f4 H8 v case "onafterupdate": 2 v+ h' l# n0 I1 `& @% ]- l& K; L' F0 y2 U case "onbeforeupdate":' q2 |3 p; f8 T' q8 r& Z case "onblur":6 @4 A; b5 |: v( q/ m: T o1 @2 R |, U case "oncellchange":9 i. O/ Z' u2 ]% g! \0 j: t2 A9 M case "onclick": 7 t& ?) `. d. I+ @; } case "ondblClick":1 d e6 |. z7 C& S0 U% W case "ondrag": m% H5 t" g, n3 A! w- ^ case "ondragend":7 h( @, s8 f8 P9 F( e case "ondragenter": 0 I) w ]% d9 U( G; M; A case "ondragleave": " m: G+ g2 Z6 C- f# s, \ case "ondragover":" \. b2 l9 z4 I. G/ ~ case "ondrop": 7 m, X* e& ]$ r w5 s! _ V case "onfinish":& v' B1 T6 v; h. F( m" i" k9 B case "onfocus": " T7 \" w# C) y case "onhelp": + g5 e" S9 d1 [; A case "onmousedown": 7 U+ J" z2 d$ K8 ?/ u case "onmouseup": / q& ~8 ^8 b* \4 Y5 D7 B3 }( {/ a: \ case "onmouseover": 7 `/ I' C3 x0 T8 g# n case "onmousemove":4 E" x! u5 t; v case "onmouseout": $ l$ X* [9 d1 g0 G case "onkeypress": 5 F& h3 |8 J2 B/ _0 q7 E$ Z- S case "onkeydown": . d$ @* F. [2 i case "onkeyup":2 n; ?& h0 |. k) O0 y! h; u! r/ J case "onload":" e N$ X# v+ L3 w7 a. S; D case "onlosecapture": " `5 s) G# S: u. d! w; N case "onpropertychange":2 [1 E* M8 v; u, b" D case "onreadystatechange": 1 y5 P( `& G4 H0 ?: N# o3 ~ case "onrowsdelete":6 |% _2 c5 ^5 Q, i) B: h case "onrowenter": & v4 q+ e, l5 Y9 }( B5 | case "onrowexit": 3 B+ z& g' M0 s) h; H case "onrowsinserted":/ f: v5 r: s4 c1 s3 K/ r case "onstart":+ y$ g- P0 y) h# I f/ a case "onscroll": 0 @/ w$ O# w9 p" V" ~: J% B case "onbeforeeditfocus":5 i0 w, ]; s7 X; s y case "onactivate":/ o; \3 {) P; S& J- |- z& _ case "onbeforedeactivate": . m( _$ m. I3 `% f8 n0 h case "ondeactivate": X7 |1 N L9 ` case "type": : x5 O! ]5 L, l# l) Y case "codebase":4 q7 g1 s4 f4 U+ f/ `8 ~/ G ret.objAttrs[args] = args[i+1]; 1 _3 V8 C. y6 t* O% N break;, J! b5 z' Z! T& |- v, ]) k case "width": 5 I% Z2 ^6 G/ c# }- t! o% k case "height": + Y- n) d: q( x' P; C+ B1 v7 i! l case "align":! A# u) j* k- W$ C' [ case "vspace": 4 v* Y/ I- A2 \9 L3 W0 [) o" z case "hspace":; Z( k! e+ t8 l. c$ R7 I: @0 P case "class":. n; G. Y& h- O" v5 t1 L2 ~ case "title":1 \( Z9 [# P' o1 X& s% s' i$ W case "accesskey": . R% m) V3 x% d" m- C. ?2 r case "name": 7 _2 h( X6 S9 o+ z) z case "id":1 G$ P/ n5 m) B. d6 [ case "tabindex": % A/ P% L% [$ O" W ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1];, D5 H! k; z1 b- M0 ^ break; 2 X9 B$ u( `: |; \ default: ! `: [1 f* @4 B' u+ ~7 x- ~ ret.embedAttrs[args] = ret.params[args] = args[i+1]; , i% M5 I4 G- U$ [! q- i } - {5 R# q* h9 o' S3 N _ }5 u7 q G9 V5 T; z# Z ret.objAttrs["classid"] = classid; 0 x! n1 ^' Q9 e) F! {: T if (mimeType) ret.embedAttrs["type"] = mimeType; 4 ]* z! e1 P/ \- K( a+ n+ f. J return ret;3 _2 D! i- W& ?0 @- X a* Y }4 ?9 s$ B8 F' F4 V2 q$ x+ n3 f: {' d 2 t; p! v i2 q: |% ?/ j8 i* M 2、保存为:AC_RunActiveContent.js $ l( y2 Q) h( q" k& s S3 L 2 j9 S. Z& g9 j4 J3、在所需的页面中添加; 8 H8 O- |8 c* s) \" K4 c( M: _. F# d, o) l7 M% P* A: A% v <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>" O: d; `! Z: F$ @, l' K$ L % r/ [" T, g6 V* G* P4、在插入FLASH的位置添加: 2 A% r6 ^0 C, ^ 3 Q# g% b9 H- w6 y; a1 _9 `<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>) D4 Z ^5 u& M8 ]. C <noscript> ; j5 @% R c2 p% ~* i. p1 W: l6 h5 ~<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"> 1 X0 u' [( k$ A- O5 y<param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">$ G/ o% Y' N% n! W" L <param name="quality" value="high">8 Y) V* K) d2 g <param name="wmode" value="transparent">+ n& {$ U2 b( k1 J& z( m <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>3 c2 W. `, E% V; N- B! ~' A </object> ) F% w0 P- `" O) |) P</noscript>0 @; o0 r. P; q" a" t+ P 6 |/ e- m4 L; m5、页面中的完整代码: 4 H' |: N6 B- }. p5 B$ q6 `* ]% ]# W+ o2 v/ {$ k& [ <html># u* K' C: Q7 G, a! { <head>+ f$ d3 s* X- W) q- a( v2 m8 I <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> - o5 y7 p$ |; }5 X<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title>/ B0 V5 t# j" Q( K. H7 T <!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径-->3 L; B. D: y; _0 [$ V- U <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> $ w3 j8 [2 i' q# K<style type="text/css"> 5 W7 O1 }$ w. s* u0 O<!-- 5 O( E1 ~4 T# h& h8 E/ [body { 5 p. w! Z% b4 J background-color: #CCCCCC; |: M% y7 u/ ~ }8 E+ v7 V s) ~ x( z3 V --> 4 e8 q' k4 k. i+ \5 H& U' |</style></head>* ?. F6 F4 W- Y0 L+ c1 P <body> % {" i: _9 {+ A0 F, P* j i' d% Q) k. `. O& F! t( A <!--下面这段JS修改的时候要注意,一共要修改四个地方:5 i6 O( G' S. M( K: S2 r6 p 300 是宽度;# I: J' k! Y3 }$ |* H% Q5 t* u 200 是高度; F: |1 B0 y# m# j* L images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->1 A& ?- p3 a/ U% k( q3 {$ e <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> ( o7 g/ W f3 S+ x) C l! h( \<!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。--> 2 v C0 Y. P( g1 Y0 U ? Y<noscript>5 z i4 a' d9 R' ` <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">) N6 C8 D& X4 W5 ?) ^/ |, b <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf">$ w# |0 u9 U% N% {& O <param name="quality" value="high">& t/ P) r: {* R& W4 j1 E <param name="wmode" value="transparent">5 S/ T9 Q4 r% J. a( N! D0 \ <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> / R" K: f1 S" I; @' w</object> . Z+ P5 @* T$ |</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧! 5 R/ R. f2 ^2 ?6 K/ {  今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! 9 c- c6 @, z3 f! H7 ~5 z  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!6 U6 I, \9 c5 t   不敢独享,先建一个JS文件,写入以下代码:; {8 x* ]8 o: g ) W4 }0 I$ l5 z/ c: b
  1. function al(){) S l" X+ l' Q; T5 O0 |( x
  2. alert('ok'); M, h9 ]0 |2 b) v
  3. } 8 H6 S7 s3 M' ?& {: l" o& r0 f' {! H
  4. function AC_AddExtension(src, ext) * m, Z3 j2 ]% \6 Y8 W7 x0 Z! X. O
  5. { o3 H" K2 ?- x
  6. if (src.indexOf('?') != -1); E+ B1 P. i* E4 V0 g
  7. return src.replace(/\?/, ext+'?'); * F& r2 {# d$ k! [3 {& i7 c
  8. else% S D- F( e% I' t+ B W' u
  9. return src + ext;) ]1 T% G9 J- o8 _. d. A
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) & P! o4 u. R4 C& W7 ^" s1 h
  11. { ( F& l- Y8 e- F6 L4 i
  12. var str = '&lt;object ';4 K( S6 s3 l; }; Y5 R( i
  13. for (var i in objAttrs) * F2 Q) ~2 b( k+ c4 l4 ^1 Z
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';: o2 U+ }" E6 q: a3 V% H
  15. str += '&gt;';" _7 {; {) R q- C
  16. for (var i in params) E6 d) G1 C, J6 \: a* p' D8 U U
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; # e# V6 ?8 \2 I" h9 i4 l1 R2 T8 P$ _- A
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed '; 8 L! O" i1 ~9 u" s9 b1 |+ Q3 j! z$ Y
  19. for (var i in embedAttrs) & Z; i8 Y$ ^4 f5 L
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; '; & h4 C. |5 ~: q" S1 ]6 x) H2 U/ l
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); 1 I! v: D8 [% S* v4 r: m
  22. }function AC_FL_RunContent(){- U+ C. c& M! @; h$ w. v F$ Y
  23. var ret = - `3 {- @$ W' @
  24. AC_GetArgs$ [$ ^( \( V+ u$ L. N: [2 Q$ W, d
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; 5 L3 p" U% @. e
  26. , &quot;application/x-shockwave-flash&quot; - u1 m$ ^1 H' P+ B, U
  27. ); 9 O9 O; a' n. N# M
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 0 ^4 E$ y% p) e, n! _! J( s+ ]) `8 C
  29. }function AC_SW_RunContent(){4 K1 }- Y& R5 _' W
  30. var ret = $ c- u6 D+ G4 f
  31. AC_GetArgs* B0 V0 I* ?3 a3 y; V" D7 x
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot;) L9 k7 E6 F# J2 C5 W8 Z
  33. , null 4 U) V, ~2 k6 A$ |
  34. );1 G( V A2 ]6 R+ i0 e; z
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);* G) ^: j! V6 w2 y+ z
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){% z+ }: u" A9 P* f
  37. var ret = new Object(); & i, q$ x% J: C; C A
  38. ret.embedAttrs = new Object(); 9 J. z8 Z8 B& p1 b
  39. ret.params = new Object(); # O, Q/ x# q$ i8 ]9 C5 x/ ^
  40. ret.objAttrs = new Object(); . u! a4 A( d$ g" D0 O
  41. for (var i=0; i &lt; args.length; i=i+2){# z$ @9 y: j9 y+ `) }8 C, v% e
  42. var currArg = args[i].toLowerCase(); switch (currArg){ 5 u% b, {$ e b$ a. ]* h0 j0 W" D& w" C
  43. case &quot;classid&quot;:6 O7 a# s5 H3 V2 j% b- g
  44. break;) v6 A" n0 c/ t) g
  45. case &quot;pluginspage&quot;: " L# G: b' K4 i$ {8 d5 L5 B* N- ~- o
  46. ret.embedAttrs[args[i]] = args[i+1]; , r* v5 X1 C$ ^; ]: ?
  47. break;2 y( T( L4 ?7 l( R
  48. case &quot;src&quot;:6 Q. S- D( k9 m1 T; y9 ~% R/ R4 E9 S5 u
  49. case &quot;movie&quot;: 7 N- [# x9 P8 I1 a. S/ J
  50. args[i+1] = AC_AddExtension(args[i+1], ext);+ [* \% {$ }6 v
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1];7 t/ m. ~! S3 H- m# D* Q }
  52. ret.params[srcParamName] = args[i+1]; " k% D7 X0 C+ a9 Q4 h% F* a
  53. break;5 W. t5 N6 w3 T; i
  54. case &quot;onafterupdate&quot;: * f" Z, J" A7 \! w& j
  55. case &quot;onbeforeupdate&quot;: 3 d1 _: Y i6 W9 H: T- k- L) r
  56. case &quot;onblur&quot;: 8 E. K" n. g2 L! X9 q$ o7 B
  57. case &quot;oncellchange&quot;:% Y8 v% W) {3 A
  58. case &quot;onclick&quot;:- {0 G; @7 p/ q0 d* R, x6 D
  59. case &quot;ondblClick&quot;: 7 l/ s: a- f/ P. X
  60. case &quot;ondrag&quot;:# L) u2 w. ~( b7 }9 B$ x
  61. case &quot;ondragend&quot;:2 G$ D2 b R! ^5 d5 i! x" F: U% e
  62. case &quot;ondragenter&quot;: 8 D5 u0 |1 U7 F
  63. case &quot;ondragleave&quot;:% p9 t# j% k7 v) S4 g# ?' e! {
  64. case &quot;ondragover&quot;: x6 D' U6 ]: U5 g" |8 j
  65. case &quot;ondrop&quot;:; o8 ^& `# U0 Y3 U# @, C8 f; u
  66. case &quot;onfinish&quot;: % u3 d3 k: c' t4 @2 k
  67. case &quot;onfocus&quot;: ( P- ?: H& Q7 p3 y' [5 H6 ~
  68. case &quot;onhelp&quot;:4 o/ s. B, s3 C
  69. case &quot;onmousedown&quot;: 7 P7 m6 d; e( y
  70. case &quot;onmouseup&quot;:4 ~3 s$ `6 F# _4 `8 [3 s
  71. case &quot;onmouseover&quot;: ' @( u: _% T( k2 c! a
  72. case &quot;onmousemove&quot;:8 \6 _9 u4 N4 ^+ s* J; M& h. s
  73. case &quot;onmouseout&quot;: / ?+ u4 I5 m; m" t- A
  74. case &quot;onkeypress&quot;:) b4 w9 Z1 ]9 B9 B
  75. case &quot;onkeydown&quot;: 6 ^7 s n; w$ H# j% u0 N) J2 f# j, p
  76. case &quot;onkeyup&quot;: 8 Y# D8 v: t8 F2 Z7 P0 @6 U! C
  77. case &quot;onload&quot;: - v9 f5 x; p6 d5 {0 r
  78. case &quot;onlosecapture&quot;: 1 ^* X: b3 _" U# E& Q
  79. case &quot;onpropertychange&quot;: 2 Y& N Y% E' T1 L
  80. case &quot;onreadystatechange&quot;:3 R3 q% |( v/ c" |1 {" b# c
  81. case &quot;onrowsdelete&quot;: * a4 B, Y; X1 h/ u& w7 {
  82. case &quot;onrowenter&quot;:! P2 I9 f& h: s% \ u
  83. case &quot;onrowexit&quot;: ! B) V; m9 ~- f
  84. case &quot;onrowsinserted&quot;: . p2 ~, a5 E+ J6 w( ]- V
  85. case &quot;onstart&quot;:+ d. {. f- T- J7 t0 {# x7 D
  86. case &quot;onscroll&quot;: # p* F2 y) B1 x! I( z8 Y& z
  87. case &quot;onbeforeeditfocus&quot;: ! Z' u" I9 m1 n+ O; o2 U. H4 `9 J% v
  88. case &quot;onactivate&quot;: 9 j& ?' O2 I3 ?# x
  89. case &quot;onbeforedeactivate&quot;: , C, }( n ~( A# t8 S/ }: m" m* U
  90. case &quot;ondeactivate&quot;: 3 L, a2 T! ^: d! z
  91. case &quot;type&quot;:; j. V+ q8 w7 i0 Q) w6 V
  92. case &quot;codebase&quot;:) @. e B% Z- t( w7 ?: `# T# d9 ?2 m
  93. ret.objAttrs[args[i]] = args[i+1];2 O' j6 Y* |) p. s/ u) Q; n
  94. break; t4 Y, b- E5 _; t& M/ Z
  95. case &quot;width&quot;: * L& r) P) s9 ^: e7 j
  96. case &quot;height&quot;:7 ]+ v+ \* B3 I; A7 i- J
  97. case &quot;align&quot;:4 c) |. @5 w V1 }9 p4 ]! o
  98. case &quot;vspace&quot;: ~9 F a9 V/ x: P; Q
  99. case &quot;hspace&quot;:* X5 z, n" a& Z% |% R) Z
  100. case &quot;class&quot;:" V/ h0 x, E, F( N8 d
  101. case &quot;title&quot;:7 j* g2 a) j# \2 l$ d2 u* t) C
  102. case &quot;accesskey&quot;:) R5 o% v# w2 N; c$ Z# ^8 L, d0 F( p. d
  103. case &quot;name&quot;: 8 v/ @7 ~! a5 N+ o! U
  104. case &quot;id&quot;:- ^. U5 `+ i; @9 p; \( w% f
  105. case &quot;tabindex&quot;: ' Q2 ?( U, D5 N3 j: r+ z9 L8 t
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1]; / j- o6 r' u7 N: c4 ~5 N) j% E( l
  107. break;. s! y v% I3 I1 K$ ~& f
  108. default:. ]0 ^( O/ V! _) b6 r
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1]; + R; Y" i6 {/ x" ^# q
  110. } ' J; \+ `, L; U' H2 S4 r+ Y
  111. }3 n1 r# N$ S5 N; L& d: A
  112. ret.objAttrs[&quot;classid&quot;] = classid; " E( [% S3 i4 e4 d1 N' I
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType; 7 q5 R( }# P& w$ Q% {
  114. return ret;& O* D( L/ `2 h7 l- w: k) O8 s
  115. }& m( |9 h" s3 m9 ]
  116.   
复制代码
! ^; m. ~2 p) R- p' K6 P% T 然后在要实现这个功能的页面上,调用这个JS:3 c* A' j. i: j# j: ?0 i! `4 l $ W0 M# r T( U2 M( p
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
   1 R* z2 l& Z' @7 R; a6 Q+ y) d$ C+ M& f" \2 w9 h3 {. G% K# j% J5 f 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码: ( s" N$ q6 j- b; `! J$ L1 U/ X! I2 g. k. W3 g
  1. &lt;script type=&quot;text/javascript&quot;&gt; : h+ \* C& t" Z
  2. AC_FL_RunContent( 1 [3 Y# k+ o& C! I6 q
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0' 5 a1 q1 e5 d: ~# r4 A5 z! L
  4. ,'width','524' //FLASH文件的宽 7 X* p. M& `6 e0 R
  5. ,'height','55' //FLASH文件的高& p9 |6 i% l. K
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf) p: q6 g2 q! G) ]
  7. ,'quality','high' //FLASH文件的默认质量 4 x: p* S* y9 `9 }& R
  8. ,'pluginspage'5 U% l+ V2 o0 U) n# _
  9. ,'http://www.macromedia.com/go/getflashplayer' ) u6 O) i% A- `. H
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 8 U: A! Y9 H& h D3 r
  11. );6 O1 s! L& _( p0 x$ O/ w
  12. &lt;/script&gt;9 C; y7 X* M2 g3 @$ c; v
  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-4 23:15

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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