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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。; S0 \4 c; `( ~ , H9 @: _( e/ K( K& x/ V5 y最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。; e) F0 S) O' s, G& Z + l. p! {! f2 ^' I) m' p0 @今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: , ^$ x- }5 g- f6 q 3 S) O3 j `8 r" ^+ Q" m4 W新浪 (www.sina.com.cn)4 e+ P2 E+ h3 U# s% R" j- 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; 6 P! W% \. X2 V0 k2 G% V8 c
  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;); / Q' T2 g, K. A& Y+ J3 P
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); 8 ~, L( X# F9 L5 M
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); 4 t9 I- F% u! Q- A7 p) X) i, w
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。 " K3 ?! ?1 |; F( B+ |( A $ ]- M3 i* @- n8 s) Z( U新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 * V# [' ]* C" y0 {. u & f e4 q- w9 U8 l搜狐 (www.sohu.com)! d9 `( _1 Q, v% t( q# {& t 搜狐的手段和新浪如出一辙,首先加载: 9 u" B8 @9 d% B/ s$ B% S 1 U3 k, t0 o5 n8 o* N9 G/ [3 S<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script> 7 I4 r3 C. u; c# \2 j: {. ^调用:
  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;); ' |. H( V5 V) W2 T. j5 c c
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;); % W# X- t# e1 } i7 M' v3 J6 m! n
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);( r' w3 D2 @% }
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;); 7 J1 f' x) Q+ a7 g4 M$ c4 v
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。 ! i( k# M, E; W$ \ 8 U) T; w; i' n3 {+ G& W# n你说是搜狐抄的新浪,还是新浪抄的搜狐? + R! D( t4 k Y3 t; f* O& k" |1 n9 y. z% i 网易 (www.163.com), p6 e3 q) Z U 网易就是不一样,处理手段显得很有技术性。首先加载脚本: $ ~- C$ P+ n* I8 v6 ], l/ T, D- j/ N O# Y8 z2 I% L! A3 K <script src="/DartRichMedia_1_03.js"></script>5 H& k' g: m- l2 j2 ]; F 页面上直接用 docuemnt.write 写入 Flash 的HTML代码。 6 Z$ j. y; R* F! }- W R7 L3 o" _+ s. D$ ~# h0 X按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { " j8 |' M5 B7 }" n# C' `
  2. dclk_isDartRichMediaLoaded = true;- s: |8 |. f# Q7 ~
  3. function dclkWrite(str){ n+ A3 W/ Q5 W4 w) Z, P
  4. if(dclk_shouldOverride) {' M! I+ w: }4 M9 ]
  5. dclk_original_documentWrite(str);$ f3 Q1 i2 v9 O1 I& S1 s4 M
  6. } 9 G: j, N# L, U: e1 i/ p
  7. else{5 c9 z% P7 q* n+ {8 y6 Q
  8. document.write(str); [4 `+ g) x8 n
  9. } $ I7 c- Y4 Q V G3 W0 J
  10. } + c! S* Y7 {; r2 ~' X' M
  11. function dclkWriteln(str){7 J: Z7 w# k) i
  12. if(dclk_shouldOverride) { 7 H& X1 a) ]8 p# }) j: e% k. ^
  13. dclk_original_documentWriteLn(str); 3 q& }2 J) A2 Z$ E4 Y/ g$ j B
  14. }9 y) ?8 S) v- x8 k
  15. else{ + m" |" o$ J* t" H
  16. document.writeln(str); ; A" b9 N, G8 D4 M8 A9 h4 o
  17. } ' M3 y7 N6 I+ O2 B. p( y
  18. }/ I, s7 G1 r5 s% L( X; u
  19. function dclk_isInternetExplorer() {* J+ a, a; L% I8 r8 {
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0);0 M: `7 I# G+ l$ n6 M
  21. }7 ^, L0 b- @3 L( c) [
  22. dclk_shouldOverride = dclk_isInternetExplorer(); / D, Z- W: H. q
  23. if(dclk_shouldOverride) {$ Z1 u. G1 V5 H
  24. dclk_original_documentWrite = document.write; % b, M5 U) L6 r
  25. dclk_original_documentWriteLn = document.writeln;- S0 @4 t; f4 o. x
  26. document.write = dclkWrite;" M' b% H; }0 J G2 h, y9 ^& T
  27. document.writeln = dclkWriteln; $ p6 |% g) W7 O; @& ]
  28. } 7 t# g3 `% H; a- ^- S* K" ^; }* d" F" T
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 6 o( S _7 K o; E 0 u6 K6 ~0 H1 P1 ?0 d) X) e雅虎中国 (cn.yahoo.com) 9 f. T! q; a* E5 a2 _; D2 t& Q/ BYahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 , \- p9 `1 h8 i/ w, J Y1 l* t( J( }8 O) B' F* v 腾讯 (www.qq.com) / o8 U! r; A _默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。 W/ k$ ]8 C( n% e }( s( h8 o4 L/ Z - b6 o- v K" Y% ^, |/ `. w) G5 i , k& ~9 N4 G# l7 S 稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。1 p5 ]' U9 V. q. B+ d- K. M! o" V 4 t( y) Y8 {/ l6 p使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。5 ?% k3 k9 B; n5 Y & }& Q% H. j3 u9 f9 G* H* z+ K% n网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: 6 {6 T3 _9 X' E5 c; L6 R1 y % }6 ~% b, e! u" m% ]//只要在 </body> 后面加上一行 8 C. n$ B' m& Q) I <script src="javascript:'document.body.innerHTML+=''';"></script>. B/ \8 W. b2 j' H% M% r) Y5 s1 c& I 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

我在Ajax中国上曾经对比过国内门户网站对Flash激活限制的处理。除了qq.com,各大门户网站上的flash都已经解决了激活限制的问题。淘宝的页面上也常常会使用到Flash,激活限制导致用户的交互性体验感受不够友善。 / K" W( N+ k% ? " q# d4 E9 g" p% W8 y- b x) P我们一直想解决此问题。但是国内门户网站的做法都略为麻烦,要么需要为每个flash编写额外的js,要么就是在页面上放置flash的位置打上一块<script>补丁,利用SWFObject或者UFO提供的脚本写入flash。 - P5 C6 z; {/ j# T" u. w. g, X9 N8 @3 D. `/ ? 网易的做法算是最技术的了,它的原理可以简单说一下(感谢在网易工作的朋友的阐析):通过外部引入的js代码覆盖主页面的document.write方法,这样在主页面上利用document.write方法时其实是外部文件的函数来写入的,实现了active控件下载和主页面分离。这样也就避开了激活限制。0 ~& @, O* V" y " i" d, p: C* y! | 可是,以上的所有解决方法,Flash都是通过脚本来写入的。比较注重web标准的网站会附上一段<noscript >来弥补禁用JavaScript的用户。但大多数是置之不理。 - T1 u5 u& ? ~5 s. ^: j 6 c6 J$ o8 F! Y! m8 |$ s一番google(我真的是用了yahoo,不过没找到什么),在SitePoint上发现了一份很有价值的文献ObjectSwap: Bypassing the ActiveX Activation Issue in IE,如获至宝。 " u# t, q7 J- [( ? " p7 b# C* [* M7 TObjectSwap提供的实现只需要在<head>中引入一个脚本。虽然也是使用脚本,但其逻辑是在页面加载完成后,重写一次<object>标签来实现自动激活。页面中的flash依然是标准的HTML。不需要通过document.write写入。而且对于禁用js的用户Flash依然可以正常显示。这应该算是最unobtrusive的一种实现了。0 Q/ C/ p6 r+ D" o; y + B2 Y7 v. a5 S" f: n* x) p0 \0 @ 最新的ObjectWrap 可以从这里下载。 + j1 L, [4 h3 |- [# y; A! |& k$ Z" _9 z7 \0 r- T8 ~ 原来的脚本有6k,我简化了一些逻辑,并通过条件注释让脚本只为IE6/7服务。让人欣喜的是,不光是Flash,只要是<object>,ObjectWrap都会处理,这样我们在安全登录淘宝或者支付宝输入密码的时候,也可以节约一个单击的气力了。 $ m l( g( w, n3 G' x$ d4 O9 G! V) Q. ~7 N' V5 @ y 至于为什么重写<object>可以解决激活限制,就不要深究了,正如IE那一系列让人抓狂的CSS hack。我们只能逼自己记住它,傻瓜才会去弄清楚为什么。 r! c" H7 H# B/ S" A - H) R, G0 F9 d. O5 Q 最后向ObjectWrap的作者 Karina Steffens 致敬!# i. W* `5 I2 Y& M' w+ g8 S1 y8 d $ h7 N% l6 f" S! F5 e http://ued.taobao.com/blog/2007/01/17/activate_activex_in_ie/
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。8 _3 e2 _, e" F & S$ j) ^4 A6 W/ ~: r; K 当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法:$ y" x; B$ X1 s ' Y5 m) x% L- D. @ 1、新建JS文件:9 G/ h, ^6 M" t$ | . a) F" x2 |) L8 |, [, E; }//v1.0/ N$ Y5 b2 j; H //Copyright 2006 Adobe Systems, Inc. All rights reserved. 2 N7 `% i: O7 B; |+ C$ zfunction AC_AddExtension(src, ext)! `' ]# w! G; y5 T1 N+ F {7 {3 L% W3 M" u if (src.indexOf('?') != -1)" u: {1 Q, r# N return src.replace(/\?/, ext+'?'); 4 g B0 K5 u, l" B) E; E else/ C- D* a' f R1 P O0 Y return src + ext; ( \. F+ @- K/ h4 Z$ G}& Y( {) S3 O; k % u0 R- j$ h0 |& e% F- Kfunction AC_Generateobj(objAttrs, params, embedAttrs) 9 Q% @/ B+ A! k( c0 p% b0 n* O. H{ + s) S6 S! V1 c' n7 N8 m7 p4 H var str = '<object '; ! a8 D+ T) ~% ]' Z8 W for (var i in objAttrs)5 U p: @# n8 q str += i + '="' + objAttrs + '" '; ^, @" {. ]% ^: a ~% r2 | str += '>';+ H% W, i; B: q: {# k8 ?( e for (var i in params)8 o. R% J, H; [7 L str += '<param name="' + i + '" value="' + params + '" /> '; & K* R* t; D# `1 j& ^ str += '<embed ';+ A; P- j* ?1 t3 g8 @9 f. W for (var i in embedAttrs) & r% a. J9 m; S b str += i + '="' + embedAttrs + '" '; ( f6 x7 m2 Q! [9 i str += ' ></embed></object>';* l8 z/ d S( f f3 c& I: ~. [ 4 E/ D! z8 T; i+ [ document.write(str);$ m$ F) e& M0 T. c7 a }3 X# @4 a/ G2 j4 a ) } [3 t, ^# Z/ Y3 rfunction AC_FL_RunContent(){ 1 Q$ p! _4 s2 A var ret = $ Q+ t$ D/ h8 L1 p/ ` AC_GetArgs/ Y; C9 f/ q' L- F4 Z* D ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"; H. y$ K9 O6 r3 }! x& G , "application/x-shockwave-flash" 5 q5 {4 |' r% A, d, d* l ); 8 Y+ E. \4 A' V AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); * N. d& J; x; y* [2 Y} + B4 T9 e. C& ]8 }2 I) l0 s" K3 u$ K+ e1 a% c6 h function AC_SW_RunContent(){ ; z K" C K+ c3 I( d+ s( f) k var ret = ; d( o& n% a s% Q+ ~9 j y AC_GetArgs ) p" x* @% Q9 d- Y6 i! x- | ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000" - z9 \: L3 R, l( c/ u , null , Y1 v/ \2 V2 G2 y' N( W$ [ ); 3 b3 G. u9 z7 ^ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);" j- W5 Z% x: C5 V8 a) _1 @' u( y } / ?$ _5 x9 U3 L! ^4 s5 T2 ^ ) M4 A3 Z7 X6 i+ c$ B. A8 x; |function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ - ~ N7 }9 U% l: h var ret = new Object(); # P9 @+ N3 P* Y6 E9 a7 I4 ~ ret.embedAttrs = new Object();, A2 z6 S- y2 c ret.params = new Object();' Q% V4 f; F- l# N' G ret.objAttrs = new Object();+ j! h0 o' s: K3 i2 Q. R4 o for (var i=0; i < args.length; i=i+2){9 S; W; o! H% q: x# H var currArg = args.toLowerCase(); . o' G6 h9 s9 D5 C " _; V# R$ R: Q1 Q1 i. b9 t0 `2 F switch (currArg){ & l5 J' ]$ w `+ c case "classid": 2 l1 p- ]2 H0 x7 C1 ?- {3 v break; ) z B" N7 c) X, \# Z" H case "pluginspage": $ D* {9 C o( k2 _2 @3 k3 M9 U' M a ret.embedAttrs[args] = args[i+1];' ] H" E; d. `* q$ `1 x break;6 S5 H* Q, v' I7 K case "src":* t. m' n% u- y2 p) v! X case "movie": ( i& d; A3 M: d. K0 a0 Y6 X args[i+1] = AC_AddExtension(args[i+1], ext);) \' o+ w$ ~. w: |1 t ret.embedAttrs["src"] = args[i+1];& E# L) j' P& z" _/ L ret.params[srcParamName] = args[i+1];0 @$ {) p, Q5 t; c6 d break;$ K$ Z j1 n( M# u P* |3 T case "onafterupdate": ( @# O6 J7 [: `% ~5 O( y/ t case "onbeforeupdate": ! t4 c7 j% E$ T0 z" Z7 C& _ case "onblur":0 l, Z/ {4 w2 W i! q) t6 m! a5 f' Y1 f- r case "oncellchange": k( U8 Z& J7 U, B* U case "onclick": & ?* s5 Q" L5 S0 `$ w+ Y& ^: S case "ondblClick":/ @, M: z* l+ g8 C9 [# m case "ondrag":" ~3 l! `4 ^0 S- i _# N9 m case "ondragend":6 o4 Y5 M. U( R. C2 U0 o4 V case "ondragenter": ) B( c) t# o, y& Q$ p, T, }& V8 D1 D case "ondragleave":$ m. q- N+ ]3 ]- K# z' E0 c case "ondragover":$ H% f7 V5 Z* E9 K! s, U) Y case "ondrop": ) w" L. H, G4 k* i: Z case "onfinish":8 V) z4 J( V# l6 a/ a8 @ case "onfocus":! R7 x9 N+ k( j3 ?) a case "onhelp": 3 I6 ^# b& f& P6 V2 _, } case "onmousedown": % C9 F9 p; b1 \$ t case "onmouseup": " Q/ U: Z; H8 L/ w/ ` case "onmouseover": + \3 g! \; C5 O u case "onmousemove": 4 A2 B' j7 ]& Z+ i0 l case "onmouseout":6 L- R: K p4 `" F: \7 S case "onkeypress":, i! N6 t6 @* \% u* U0 c# J8 H case "onkeydown": 1 q/ d* t/ n( j' |) |6 W" a case "onkeyup":3 x5 B. g( T" } case "onload": 6 C6 w4 t! j9 V- K" {1 G q case "onlosecapture":3 U! P/ ]) `, q C case "onpropertychange": $ _8 Q% z& g" W- x& x- F, K: b case "onreadystatechange":/ j$ [. f1 I5 B( ^% k8 z$ o case "onrowsdelete": 6 b' S" H+ g: x( F( w case "onrowenter":, J. k/ X; ^& E case "onrowexit":$ D: x0 w+ g9 e8 d8 k6 L5 K2 o case "onrowsinserted":9 V) E: M) F" h5 j) O& `, @! F case "onstart": $ a5 c$ G& C: _ case "onscroll": . k$ m- {3 C! P5 v+ f V- h! ? case "onbeforeeditfocus": $ |7 `4 x( F9 x- p; P# ?7 ?) t case "onactivate": ! b6 P, \0 _' I; a1 a9 [, G case "onbeforedeactivate":7 ^& b4 h, q$ `( r k8 Y% q case "ondeactivate": $ V' v6 k$ s& j; Z# b+ Q8 A7 f" I case "type": 1 C* B T D& Z3 L1 W3 N case "codebase": ! `2 n" b" N) N) Y9 O/ k ret.objAttrs[args] = args[i+1];8 |" n4 C6 `/ g: S7 b8 G: i break;9 S3 m. f/ K) L' X case "width": 0 S. Z: {3 P* E( y; Z case "height": + Q; d% @( ~) G case "align": 7 r& y! f2 r5 J/ F+ l9 a9 q case "vspace": " o6 K' K1 o! Z5 ^) I+ N case "hspace": 1 u$ I& w' G- O5 v/ [5 T8 u; B0 ~7 G case "class": ( [4 a: J' @; h ]# m case "title":% G% r/ V* h8 l" E case "accesskey": Q7 S) x, ^0 {. U) ~ [ case "name": N4 L z k8 U$ ]. ]9 Y# v# R0 n case "id":. b9 J+ ^3 A& @ case "tabindex": , U, O' E% W$ c7 D' b4 x6 P ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; w: v Q% d" K! c break;* O3 ^ ?3 [1 x9 t default:; [- e# {+ N/ F, @% O; { ret.embedAttrs[args] = ret.params[args] = args[i+1];; n0 S k+ n8 F6 k5 j2 L# V: y% g$ C } % A; r* C" }9 `- ?9 D b$ r" l6 l } 6 P2 |2 t& l$ R( d: M8 y ret.objAttrs["classid"] = classid;4 Z$ x- N8 s6 N4 A$ k' \5 j: m if (mimeType) ret.embedAttrs["type"] = mimeType;( f* _- P% f5 G- N6 T ~, K return ret;4 [( P7 V) }3 K9 O7 q7 G+ E& O2 Z } # t& w: ^' C" D: }7 K' @8 U' |/ Q/ \% l9 \' A) [2 T 2、保存为:AC_RunActiveContent.js 8 C+ l* o c' O0 p! u T9 O: m % Q/ q: u4 P$ q3、在所需的页面中添加; . ?% ]1 V1 m3 J" Q ) @. l9 z! u$ ^9 S1 {<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>8 G- [9 n, L5 A- {* e ]! @- Z: G: y9 z( O 4、在插入FLASH的位置添加: + x3 P' q/ l) b2 f% E' s. O* N; V$ Q9 f& U <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>" i9 l7 H7 c& h3 n. e$ c; Z5 x <noscript> $ j' m. X9 e' K+ o' V3 I<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">! A5 Y' @# e2 F- J# Z/ r <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">8 c' v* p- x2 I3 n <param name="quality" value="high"> S& G; l$ S' `% x6 h6 r <param name="wmode" value="transparent"> ; [4 S9 V. l6 u5 T8 o$ U( h<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>0 R( C! ~% ^+ l4 R$ i9 A5 g# g9 P </object>7 x) o$ P1 O: o# J% ?; _ </noscript>* Q/ G* d# @( ]7 F$ c+ A0 A& x% ?2 P8 j2 p $ ^; P8 \) I6 L) B5、页面中的完整代码: & u" u" r$ u9 n, k8 L. b7 V7 i5 F1 h. r# ?" P <html>8 G. \; z6 J9 k. E* @ <head> q/ Q- l; n! D3 X4 h% b1 D<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />' K4 O2 m- ?0 {0 I7 W: w# y <title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title>5 N; n" x9 G K <!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径-->8 c" l* M$ a( H( B, Z. U) P$ i <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>! `5 d" k/ H( t4 l) {4 Z8 \5 z <style type="text/css"> ; E2 p) _/ ~. a4 V y; u& ?" v# e/ e<!-- $ E& R8 Z. t8 v2 ]6 j- k; S2 F# Y2 lbody {! ^9 e, X/ k: r& e; K% z background-color: #CCCCCC; ; v' \- ^& `% [3 U+ Y} _( d% ~$ Y0 Q, x; M3 ] J --> * u5 u, n+ A8 C</style></head> e: U8 a0 I! P# E$ ~- |<body>7 |* ~. _7 o, a& _& T; O 3 f$ A% U% q# Y6 v1 ~( ?- X; ^1 A <!--下面这段JS修改的时候要注意,一共要修改四个地方:4 C8 y" Z0 l5 Q* P2 O+ [3 I i 300 是宽度; 5 o, `* @: w# h2 j: X* R; c9 w200 是高度;) A* |( n- o. U/ H9 m% j" L! n images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中-->) t) u! ~+ V+ ^/ x2 [( v7 l <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>8 N7 S0 \3 i# e$ H0 B- V. e <!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。--> # M i F: ~" v: P0 |7 k: x<noscript> 0 l: z- _* V9 j7 `. F8 x<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/ c4 z6 Y6 t: P/ n0 p <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf"> 6 @6 { V! Y$ J# n8 I0 b <param name="quality" value="high">2 y0 l8 B$ q1 z <param name="wmode" value="transparent"> - H* K8 p2 a8 g- Z <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>& c1 T2 f3 B+ S4 ] </object> # ~& f- S9 x$ I</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧!) @5 w2 W# l q   今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! ! m$ Q8 e4 V, F; S& \  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!5 S |. o/ a2 o, D2 F   不敢独享,先建一个JS文件,写入以下代码:3 Q1 C; |" V7 S2 F, V, X : K( f" x9 @, ^- ~3 M4 \
  1. function al(){ & p+ L" L. P* b6 F! z
  2. alert('ok'); % e! I0 G v8 o& @ U. h; d& v
  3. }+ E, Q) T- m* Q$ u4 V: K: S( R9 p
  4. function AC_AddExtension(src, ext) & x2 C! _. B& w
  5. {; H5 K6 K, w: ]! U' E+ T7 c
  6. if (src.indexOf('?') != -1) " t, B' K* d( I+ s
  7. return src.replace(/\?/, ext+'?'); 8 A; m) C2 i c( r
  8. else 8 E- `; j$ F1 v P& F
  9. return src + ext; - s5 r. ~. S5 \! T( Z
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) 0 q* Q* x, Z. Y2 Z- E6 I9 M
  11. { ; T( l- j6 G1 Y8 h
  12. var str = '&lt;object ';. X: U7 A5 J$ X$ h
  13. for (var i in objAttrs)9 f0 A5 d! P/ @% q- f; N8 Z
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';4 g- i Y# e2 I. @) g% }" K$ _
  15. str += '&gt;'; - N6 o7 d2 B8 C' d \7 x
  16. for (var i in params) 1 k- m& b2 I, h6 B& ]' p& N/ l
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; ';6 u, ^" N/ L: E o
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed ';, Q2 n8 d; t2 Z' q/ e9 V3 A0 a1 K2 W( d
  19. for (var i in embedAttrs)* a! n1 W# p5 a2 q
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; ';! }5 e. M& ~, i5 t \& g( `" A; e: P
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); 0 ]" O( G1 ]6 b9 X' u2 Q
  22. }function AC_FL_RunContent(){ & q S' ~0 `. H+ S; E
  23. var ret = % L* t4 C. m* V' R! P A9 Y) O
  24. AC_GetArgs, n+ z$ z! z8 z Q2 x; q
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; " a \! [; f+ Y% S
  26. , &quot;application/x-shockwave-flash&quot;2 ?( j" v" L6 d" v5 d4 e0 {0 S6 R
  27. ); # z6 \: z: d" u% b- a$ E* m+ Z
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); ) s/ N5 H5 U4 I. }- ^& y
  29. }function AC_SW_RunContent(){! j) |' Z! [' \; J6 C7 d# P
  30. var ret = / R- A" A4 ~$ t" o% D
  31. AC_GetArgs # e4 p4 b2 k/ i& B3 C- _
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; * W- U. x7 Q5 a7 M
  33. , null ! `: x F* {3 }) o+ U
  34. );, C* w( ]5 E2 i5 f. a
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);; O4 `6 ^7 m0 ~- I
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){1 N" |, B0 N0 o
  37. var ret = new Object();' b2 j3 t3 W) C
  38. ret.embedAttrs = new Object(); & \8 o+ d# Q+ y* j5 U. x2 C- {
  39. ret.params = new Object();6 b* L( G. D* y1 A
  40. ret.objAttrs = new Object(); " Y* r$ [( j/ @: m2 E/ ~
  41. for (var i=0; i &lt; args.length; i=i+2){ ( z4 m! B9 m! z- ^; v
  42. var currArg = args[i].toLowerCase(); switch (currArg){ 1 o0 n+ |$ Q/ a5 U. {1 N% C
  43. case &quot;classid&quot;:4 m8 k& `& f( z2 w3 E( U; t" P# w8 B
  44. break;" Y$ y9 c7 P. f4 P7 |! l; A, X4 f3 K
  45. case &quot;pluginspage&quot;:, s! p- ]; a. s! B
  46. ret.embedAttrs[args[i]] = args[i+1]; . L* p0 `# l8 C: T S
  47. break; 3 M) M) a1 G* |2 A. o
  48. case &quot;src&quot;:, Z, U; Q* b9 t8 A4 c( x# s0 |
  49. case &quot;movie&quot;: / a2 O5 Y2 t$ }
  50. args[i+1] = AC_AddExtension(args[i+1], ext); e9 t9 S" d" G5 A9 R; d4 }7 Z
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1]; , ^9 N" a; a) v5 C
  52. ret.params[srcParamName] = args[i+1]; ( s" ~. M, y: f+ h" K8 D8 U
  53. break;) H8 N; k+ G1 V( _, o/ p' u
  54. case &quot;onafterupdate&quot;: 3 ^" P" i2 L( C" ~% ^; g
  55. case &quot;onbeforeupdate&quot;:3 h9 P& D" J9 ^& z- U+ x% X) G
  56. case &quot;onblur&quot;:2 r6 W3 ~9 V+ Y) b4 V* c6 W
  57. case &quot;oncellchange&quot;: $ e/ N+ x" v2 t* _7 ?* {) j
  58. case &quot;onclick&quot;:! D% j2 Q/ X6 E8 K! U
  59. case &quot;ondblClick&quot;:8 b3 o9 R! L$ C/ G7 v
  60. case &quot;ondrag&quot;:1 K% q, d- D; i# l& U# a) [: H+ ?
  61. case &quot;ondragend&quot;:* g: y, Y: ]1 `4 @& ^
  62. case &quot;ondragenter&quot;: - p" q, b" i) M$ X; ^2 w' |
  63. case &quot;ondragleave&quot;:# O, h( M1 }- E3 r
  64. case &quot;ondragover&quot;:- u- _( ^6 m; \, h9 |6 E, P
  65. case &quot;ondrop&quot;:* H L( V& y9 u* V m8 U
  66. case &quot;onfinish&quot;:# F# L5 r" R/ n" n
  67. case &quot;onfocus&quot;:2 x" e3 j; G. K. a
  68. case &quot;onhelp&quot;: t7 c3 l3 M6 ^$ q7 |
  69. case &quot;onmousedown&quot;: ; F7 n( m4 g! M( ^ C, Z, T' b
  70. case &quot;onmouseup&quot;: : q- O, S) H4 T0 G) [4 k8 G* h
  71. case &quot;onmouseover&quot;:5 P3 L1 J# V3 |6 O6 l8 x# Y; H* V
  72. case &quot;onmousemove&quot;:+ `% b: ?, e* |6 m4 {' }/ V4 K
  73. case &quot;onmouseout&quot;: 3 D4 H. G- A: i8 u4 W
  74. case &quot;onkeypress&quot;:& }. d. g, _1 B5 j" x' ?4 ?/ z
  75. case &quot;onkeydown&quot;:# K q4 e* ?+ ]0 \9 Y
  76. case &quot;onkeyup&quot;:3 w+ b% e' {! `6 f w
  77. case &quot;onload&quot;:% c( x C/ a& L
  78. case &quot;onlosecapture&quot;:3 I3 T1 t3 \6 x, C0 r9 f+ m; K
  79. case &quot;onpropertychange&quot;:' o0 I% G6 s2 e% ]& f; x4 G) O2 X
  80. case &quot;onreadystatechange&quot;: 7 @3 I7 W( B9 w' A
  81. case &quot;onrowsdelete&quot;:6 @, I# o) B$ `
  82. case &quot;onrowenter&quot;: % ?: w4 h7 O7 L# E6 D
  83. case &quot;onrowexit&quot;:+ J; z! J9 `# R$ O2 n+ s
  84. case &quot;onrowsinserted&quot;: % o/ G @1 o" p$ ?, E1 z
  85. case &quot;onstart&quot;:7 J) ^. G3 O6 S! o$ u
  86. case &quot;onscroll&quot;: M8 W, @7 u7 [! [
  87. case &quot;onbeforeeditfocus&quot;: , b w% w- r7 f0 _
  88. case &quot;onactivate&quot;: 4 E- R! M! [$ c0 I5 [' P2 G! ]
  89. case &quot;onbeforedeactivate&quot;:; u! R+ J4 `! u _
  90. case &quot;ondeactivate&quot;:- j' m2 U# T; Y2 ]0 H4 c
  91. case &quot;type&quot;:+ W1 u) T" {3 }" u5 s' |0 F
  92. case &quot;codebase&quot;:8 ~6 i+ N" h( @; X" x
  93. ret.objAttrs[args[i]] = args[i+1];. `' @- ?+ D% v
  94. break; & @" R# [3 h, z
  95. case &quot;width&quot;:! ]3 L" N n4 S) N( `2 j6 I
  96. case &quot;height&quot;: 8 z6 D# c( q b, i9 H1 j& \6 ]3 Q
  97. case &quot;align&quot;:; N0 I$ x! E; R
  98. case &quot;vspace&quot;: ; _5 c6 j) Z9 u' P" ?/ r. ?
  99. case &quot;hspace&quot;: / p; V3 p0 b- \9 i7 t
  100. case &quot;class&quot;: & G" r; t! N, y+ X- P" {
  101. case &quot;title&quot;:8 m9 H D, |/ C8 m: c
  102. case &quot;accesskey&quot;:4 w# m2 K7 A h% ]4 e# v, G
  103. case &quot;name&quot;: 3 k# K4 b# M' P3 Q
  104. case &quot;id&quot;:2 h: [% @; G% `' E4 l
  105. case &quot;tabindex&quot;: 7 k; h' l, M3 j, }) X- ?0 i
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];& x2 J0 `; R& p' Y7 a
  107. break;9 W& r5 _3 i$ ]/ {" }+ [. ]2 x
  108. default: ) y3 X; h/ @8 f& b. E) d
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1]; - J& f; k# O1 T9 |
  110. } * m4 _4 X. r0 a8 Y
  111. }8 {& D5 m) X( S7 g. [' |
  112. ret.objAttrs[&quot;classid&quot;] = classid; ! z1 Q7 w6 n3 ^1 y3 |6 s3 ]
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType;8 F/ A7 [' L6 h9 Z2 C u
  114. return ret; 0 G4 W! A/ }, J, ~" a( a3 b
  115. } A9 g3 I7 S, F% Q) Z8 K+ p
  116.   
复制代码
+ R4 x2 f, ^- M% R! v& x/ J, t然后在要实现这个功能的页面上,调用这个JS:. I! I7 K: T! b, I0 G ' ]6 ]3 D8 z3 `+ @4 P( t4 c( b
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  + g% h' a) P7 X2 @# N; j/ o 8 x. p* S$ e6 D4 ]9 D 然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码: ) S: u) f l- h2 m' s- F \" x4 Q* P# u/ {$ s9 j1 k# S# ~' g4 V
  1. &lt;script type=&quot;text/javascript&quot;&gt; " O0 @! K; n6 \$ j$ k6 ^; p
  2. AC_FL_RunContent( * m( {, h R/ l0 L
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0'% n4 ?% Q) {3 y y7 x& c: o/ f
  4. ,'width','524' //FLASH文件的宽 6 F) t% f2 R* ~; {6 {, Z- X+ N
  5. ,'height','55' //FLASH文件的高 : m6 [, p2 U! V" w- Y9 n
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf9 P, n( w* f& y: J
  7. ,'quality','high' //FLASH文件的默认质量& m$ Y% v$ Z3 y7 V' A
  8. ,'pluginspage'! E) M1 b) p3 L. o9 F
  9. ,'http://www.macromedia.com/go/getflashplayer' 0 t9 s9 g8 ^6 {
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 $ l( U2 C6 H5 ~0 s9 z8 ]: P2 s
  11. );6 e, b! U. Y! b% f& V5 Y% t: v. O
  12. &lt;/script&gt; ! v* `4 o3 }8 ?6 u; i
  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-1-18 20:25

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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