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

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

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

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

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

×
今年年初之时,微软发布了一个针对ActiveX控件的补丁,安装此补丁后的IE6中,当ActiveX控件获得焦点时,IE自动为其套上一个虚线矩形边框,并提示用户按下回车或者空格键以激活控件。刚刚正式发布中文版的IE7也是同样的处理。1 [1 [$ | E: B5 o& V+ a1 [ - r& M! O* [1 X' U最受影响的想必就是Flash控件了。当时我认为这对广告满屏飞的门户网站来说一定是个坏消息。不过微软也没有把事做绝,留了一条脚本方式解决的后路。 - Z" m1 p% H+ ?3 U5 q/ { 6 a: ?2 p; R4 i) }今天突然产生兴趣,想看看这些门户们如何应对此限制的。一番比较下来,给大家汇报一下: 7 b# K+ w- n8 o2 W& V2 l6 D & f) S- t8 I4 \! p4 ]( B' E; g 新浪 (www.sina.com.cn)8 {8 ]- q7 T; P' t6 J 首先在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; 5 G% t( \' W, V) |1 P4 V
  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* I0 U) m6 C) W; g2 z( Y3 [ E
  3. objFlash.addParam(&quot;wmode&quot;, &quot;opaque&quot;); & P* a/ ^! M5 S5 u) q2 h" P
  4. objFlash.write(&quot;flashcontent_02AE4A&quot;); 1 Q" {5 ~% T0 P ^+ ^! r
  5. &lt;/script&gt;
复制代码
下载sinaflash.js来看,其实正是 Adobe 建议使用的 SWFObject。参阅Adobe的文章 JavaScript Flash Player Detection and Embedding with SWFObject。Adobe还提供了一套另外的解决方案,并集成到Dreamweaver 中,不过好像用的人不多。 [; V/ G7 b+ P) Q: K 3 ]5 g( J8 P( j9 t 新浪将其改头换面,或许加入了一些自己的处理,我没有兴趣去弄清楚:)。但我想虽然人家是MIT License,但版权信息还是不要去掉为好。 % ~2 q$ w. v& C, V7 M, F 8 A+ B" t$ ^; T* F搜狐 (www.sohu.com) ; ^3 s5 L5 S8 o( Y. E; H6 T搜狐的手段和新浪如出一辙,首先加载: ! |: y/ n4 }+ V: F; O' i! s$ G8 W$ j 2 G. L0 p( [, v# O! _ |- I; k0 v<script src="http://www.sohu.com/sohuflash_1.js" type=text/javascript></script>7 m* Z, M+ U7 ? _ 调用:
  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;);8 S( J/ ^4 d5 X" ?2 D$ R
  2. sohuFlash2.addParam(&quot;quality&quot;, &quot;high&quot;);+ Z5 e5 ~4 m% g! g4 v" d8 s
  3. sohuFlash2.addParam(&quot;wmode&quot;, &quot;Opaque&quot;);( x. Z+ g) \% R% g# P8 P6 V
  4. sohuFlash2.addVariable(&quot;clickthru&quot;,&quot;http://adc.go.sohu.com/200611/10083225efd048d2153be48383171872.php&quot;); % U! N, S% C6 U3 i; j. D; B
  5. sohuFlash2.write(&quot;_turnAD9&quot;);
复制代码
sohuflash_1.js 同样改写自SWFObject,而且改得更面目全非。没必要吧,同学。. o3 O9 O0 u9 | - n! [* D8 w4 [( n) q/ i' x0 g 你说是搜狐抄的新浪,还是新浪抄的搜狐? ) \( e+ A$ }+ C3 q3 u0 N+ c. T3 ? 9 t( W4 c9 D& J4 a0 {: f 网易 (www.163.com) 0 j/ q2 B9 s5 n! e. N& f2 v! E" K网易就是不一样,处理手段显得很有技术性。首先加载脚本: ( T* |4 P1 T( g" x . K) W3 A7 @ O1 F; o! y<script src="/DartRichMedia_1_03.js"></script> + w9 o0 U3 f; t% o+ z! h0 Y' O/ ^# b页面上直接用 docuemnt.write 写入 Flash 的HTML代码。3 g" l" Z C0 Y0 ]% |! i / }+ `% W$ z& T+ i- o按照微软的说明,直接在页面上使用docuemnt.write写入是不能饶开激活限制的,Hack就是那个加载的js中。代码如下:
  1. if(typeof(dclk_isDartRichMediaLoaded) == &quot;undefined&quot;) { " W: q+ R# R' x I
  2. dclk_isDartRichMediaLoaded = true;( x* P1 g, E+ B% [
  3. function dclkWrite(str){ - K0 g9 ~8 f1 b' K
  4. if(dclk_shouldOverride) { $ ]0 p0 @4 `# P6 b, p0 ~$ [0 M- Z
  5. dclk_original_documentWrite(str); 6 [/ h S' x+ ?+ r% T3 I
  6. }1 |; m' l* R3 k
  7. else{ 2 R0 I3 D' s% A2 P7 _% v* o' a9 m
  8. document.write(str);' Z' K' D; b7 x# Y3 S7 v
  9. } 8 M' H! Z2 R5 a: V {" A2 G
  10. } 6 R( j* Z" |" a; n6 M" o
  11. function dclkWriteln(str){7 q4 x$ k: T4 z. j
  12. if(dclk_shouldOverride) {+ K; b& J- ^3 J$ l
  13. dclk_original_documentWriteLn(str); 9 ~( i) u/ H" b$ i; d
  14. } 6 L9 y) e( @ X) L: c
  15. else{ R, O+ l+ g# @
  16. document.writeln(str);0 y! a. D% i7 n% U, f) R4 t
  17. } 7 {2 h( `/ E& U; {% Q
  18. }) N2 C. T2 L2 y; y
  19. function dclk_isInternetExplorer() {" ~- }& D% W9 ?/ @1 d
  20. return (navigator.appVersion.indexOf(&quot;MSIE&quot;) != -1 &amp;&amp; navigator.userAgent.indexOf(&quot;Opera&quot;) &lt; 0); 9 L! Q- m( h! L8 G6 s! ^" E
  21. }* k) x+ t9 l+ V1 D- A5 K
  22. dclk_shouldOverride = dclk_isInternetExplorer(); - Y$ ~. ?. a/ g/ k
  23. if(dclk_shouldOverride) { 4 X2 b& A/ ~$ @0 k1 n1 H. o( q1 f
  24. dclk_original_documentWrite = document.write; & G q/ Q/ h" ?3 Z+ Y
  25. dclk_original_documentWriteLn = document.writeln;: [/ F9 r5 `' D
  26. document.write = dclkWrite; B" `, p! d5 u y% d s" D1 W
  27. document.writeln = dclkWriteln; 8 U% G" S& p" x6 {: R. G
  28. } - n7 n' h! n. o0 V% M' l5 }
  29. }
复制代码
用这么迂回的方式覆盖JS默认的document.write就可以饶开激活限制?是不是有点诡异?希望网易的工程师能给大家解读一下。 4 j8 a" B% U$ |( `* K' [ . p$ ]' L3 [ ^. V 雅虎中国 (cn.yahoo.com) 7 F7 i8 u8 D, L+ fYahoo!中国对Flash的处理中规中距,就是微软文章中说明的,使用一个外连的js文件,在js中用docuemnt.write 写入。 * L9 x- ?- G( n& n2 c0 M) Q 8 d' z, y/ f& C8 h! D& M/ N1 h腾讯 (www.qq.com)+ p, z* Z$ u# ] 默认Flash并没有激活! 后来者虽然气势逼人,但毕竟还需要时间打磨:)。& g- T3 T$ J! j( C7 e6 k+ G2 H % S& n9 l- p5 w1 e* ~$ r3 Q6 H7 e L- N, Q: I V* Q( q0 O/ h# ]) I- W0 O8 p3 m ; @% `; e! k+ Q+ W0 l% |. X; @/ G稍做总结吧,新浪/搜狐使用的SWFObject实际原理是在外连的JS中用innerHTML间接导入Flash代码。这和Yahoo!中国的处理方式归根揭底都基于微软的说明。 + q# n& {0 u) g% O6 v1 M' L( p + W I6 W6 ^! Z, q `使用 SWFObject 还能解决XHTML校验的问题,不过我想门户们都还不会太在意这个:)。2 B ~! U4 y7 ?0 ~4 {% N 0 M2 m6 n9 m2 q1 b网易的方式比较邪门,很有骇客色彩。不过还有比它更邪门的方式: . [) W* x5 L7 o * g8 w: q; X( A( }) N//只要在 </body> 后面加上一行 ' o( t3 B( j7 [- G <script src="javascript:'document.body.innerHTML+=''';"></script>. h: C( a* g2 Q! `; ] 真的有效呢! (在我的IE7中无效)
遨海湾-心灵的港湾 www.aosea.com
 楼主| 发表于 2008-1-8 22:27:00 | 显示全部楼层

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

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

使用道具 举报

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

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

 IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法。0 V! j' Z- e* R2 h9 N 9 H( T1 v7 e+ ]# X& S% r3 M当鼠标移到网页中的FLASH上时,会出现一个外边框。并有“单击以激活此控件”的提示。解决方法:, y+ q) T! h2 L 5 P, s6 N9 I4 _ 1、新建JS文件:. A4 P; a7 T' g" h- b . \& L! y4 W6 ^" a//v1.08 R, O' H4 i; d7 ~# q //Copyright 2006 Adobe Systems, Inc. All rights reserved." @; e0 G% Y+ z function AC_AddExtension(src, ext) 6 U; T% O: u6 b' I4 P! J8 A{# q" {" S4 q* N if (src.indexOf('?') != -1)0 g/ \* I* [4 N4 f return src.replace(/\?/, ext+'?'); 8 K( Q V: R- h+ ~1 y! q: p else , {# ~4 \8 @) d. K7 W2 X return src + ext;9 u! g+ {5 J( V0 x, h } - z$ _8 W" u: x2 Q p F+ [+ @9 ~& ^1 C# k( O; A. x function AC_Generateobj(objAttrs, params, embedAttrs) . H0 K! s0 q/ D4 P7 f. o { 9 v- A$ r, ^! c: z" Q8 ~% o8 t var str = '<object '; 2 h( ^$ `0 A- b' m1 d1 w4 ]5 a2 ? for (var i in objAttrs) ) D9 @& M& p3 o; h7 t str += i + '="' + objAttrs + '" '; , D1 y" N8 i( q! t0 s0 T Z) t str += '>'; ) V/ R Y: q/ Z: q. O for (var i in params)& A% N' w, N$ ^, ~9 I0 V9 Z. X$ T str += '<param name="' + i + '" value="' + params + '" /> ';7 z7 q7 _9 u- _; `8 i6 Y str += '<embed '; / N3 Q6 Q" ^ i# F for (var i in embedAttrs) ) Z+ u p( p2 Y9 n: i str += i + '="' + embedAttrs + '" '; ' p. a4 p6 |% `$ Q* ?. ] str += ' ></embed></object>'; , d( Y( q! g3 {. l0 x6 a( c% f) `' i. Q4 I0 p. Y5 _ document.write(str); 3 \& g! p# W0 R9 z9 R4 k} / L# R; `8 m# J 4 W3 A# w& b" [5 Mfunction AC_FL_RunContent(){2 S5 _& R1 h' J4 V4 |* } var ret = . ^- S* ?$ V* M& a AC_GetArgs 7 Y/ z0 U; y4 U( Y: [7 h ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 7 O, M+ }# j+ H$ i7 Q , "application/x-shockwave-flash" 1 w# t9 m, v- o: r+ |( i );& W& {1 g+ W! ~: Y) c" R9 c- V! i AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); . g1 G+ o9 U4 Y: D}) q. T9 H) r2 h/ i$ D$ ?5 C: y 7 H. Y- d) ?$ @# E2 Z5 Dfunction AC_SW_RunContent(){ & m) a8 \0 X- [3 w var ret = 3 O9 |$ E' P, |2 i V AC_GetArgs: U+ V, r0 X; a F1 s ( arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"! f, i" N6 u7 C# D) N( x, R , null 3 e: W; n% P9 s( O );/ ^) ?! I; f5 l7 \+ d2 t- Y5 @ AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); " x- z4 \0 ~) E}! l) W1 O% d- d9 Z2 n& g " V3 B ?* g6 ^ I/ R function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ ; F ]+ }# B: ]- ]2 N* L var ret = new Object(); & X x: ~& Q4 J1 K ret.embedAttrs = new Object();8 K# ]) r1 ~0 `! v' B/ G0 H% s ret.params = new Object(); 4 k6 P6 H- @* p ret.objAttrs = new Object(); & `& B* }2 s9 a& U" a8 L( u" v for (var i=0; i < args.length; i=i+2){* w c- ^( R# E2 L1 r' x/ Y var currArg = args.toLowerCase(); 4 T; P. x5 j- ]4 A, [; w, } 6 L, t# I6 @. f. }$ m, f" G1 U switch (currArg){ , I: n: \+ ?" V" ]! H# u/ \ case "classid":" j! P; M& B. Z2 } break;: D* [, m' |! S case "pluginspage":; J; j: m4 i, V9 C6 C" z) a ret.embedAttrs[args] = args[i+1]; ( Y/ l& w0 k2 D8 ] break; 4 }8 }2 l! x) w @; Q: [2 j case "src": ! K p C! [. E5 x6 e- d8 P6 v case "movie": * G/ J$ ~( V8 N! e args[i+1] = AC_AddExtension(args[i+1], ext); 6 Y; U* L2 H0 g& X( {" z ret.embedAttrs["src"] = args[i+1];8 H4 [- @& D4 F ret.params[srcParamName] = args[i+1]; ( n" f6 Z2 ~3 E: o, b" t8 S% o+ W break; 8 @% k0 [6 s6 h' u# n1 l0 @* ]9 \ case "onafterupdate": ) Z1 c( A2 }( L) n. _- _ case "onbeforeupdate":- ~7 O7 J2 R; c( F- m& u; B case "onblur": ! ?8 D, P& S: t; `- t4 m case "oncellchange": # J! E4 }% y0 F- k* Q case "onclick":# R- @7 S' s- } t case "ondblClick":) m# m0 b' d; s1 u% \$ X7 t case "ondrag": " d% \ c& l5 L$ }9 [ case "ondragend": - ?& ~ P7 b/ L! Y case "ondragenter":2 B! _( N4 ]1 P3 ]9 c1 \ case "ondragleave":1 f- }1 Z3 E( _ }0 U! R+ o case "ondragover":- R& p) f( _. [& H. M7 `4 y case "ondrop":+ t+ z9 x" ]1 a* U& l; f O/ R7 N+ A( ? case "onfinish":/ u' J& ^& K% b+ _% J( ]3 y case "onfocus": - S! d- i: r, b5 K U6 q1 ` case "onhelp":3 g* M9 s" _( ? C3 \+ m case "onmousedown": : V% n/ Y! K9 n8 w* A9 R8 p7 N" T case "onmouseup": . Q* \1 M3 r* H case "onmouseover":6 D5 E5 L! A, n- I6 T# M- b case "onmousemove": & @ A5 @/ q0 _- M$ z case "onmouseout":0 R: W1 `" X: O) M; D* v9 x* A5 s case "onkeypress":) _; @. J* Y; V case "onkeydown": [! r i3 u7 M6 u3 [; u/ l case "onkeyup": + H* n: z/ m/ c6 y+ G& g) \& X case "onload": : C. E2 k4 k+ h( p7 @. r; {: O case "onlosecapture": " }6 @9 W- o7 t7 v! J. r case "onpropertychange": & T8 @% F, c: a1 I6 j; i. e% ~ \ case "onreadystatechange":5 l; M u Z+ U' L# N case "onrowsdelete":: h1 |$ O9 k Y# @ case "onrowenter": / A1 A" g0 m* F case "onrowexit": : k: B% V: |' G. A2 {4 M2 J: h case "onrowsinserted":- t& G9 c8 ?- q K case "onstart": a" ?! m9 J3 |3 y% U case "onscroll": * P; X/ c/ G' h case "onbeforeeditfocus":) e# |: J& g1 p; M case "onactivate":( v0 d, v5 Q# J, W5 |1 } case "onbeforedeactivate":% J$ Z& [$ m& W1 A8 Y& |$ F case "ondeactivate":. m$ ~; z6 R2 O) a! U) Z: ] case "type":3 t! M" c* m& E- t! ]: j6 y3 O case "codebase":# N8 `# ~6 v! p" g ret.objAttrs[args] = args[i+1]; - z# T' r: X0 a: m7 j3 u4 M! G break; $ P2 V5 h7 |" Y. Y& z case "width":0 n- ~4 ]( [2 E% ]+ G case "height": 6 g5 Q$ m4 Z5 p case "align": 5 y% q4 D3 {8 J case "vspace": * F1 B+ }4 J. }2 C% B; O u case "hspace":- W/ q) B- T: e9 ] case "class":7 a$ t& N4 h D* l case "title": ( {6 D! n3 ?" j5 W' u case "accesskey": 1 u8 N: L4 Q" E# U& h' K: I9 D5 d+ o case "name": 9 B) W1 O' l/ t$ z3 D3 c+ f* m case "id": + _8 Y! s# f7 p0 A" ]- w* b case "tabindex": 5 {/ b7 M1 s$ Y/ H! S ret.embedAttrs[args] = ret.objAttrs[args] = args[i+1]; 1 k! L) o9 Z g7 x, g7 H8 s break; - }# G& n+ M5 \- g default:# O, K' h" F! z, ?8 X b7 \) y: X ret.embedAttrs[args] = ret.params[args] = args[i+1]; : U9 X3 L" O- l/ L }: U$ a. I, M: f" N } " N+ O% E. o8 B9 J4 k$ k% l6 ^7 f' m ret.objAttrs["classid"] = classid; 1 k0 H4 X5 L/ t" W$ R; a! q- I if (mimeType) ret.embedAttrs["type"] = mimeType; 5 S( U* x! G O* n8 \0 K return ret; D. Y" b, K- K}- s+ ~+ ?! E* n- o $ l; e8 a# O8 w. `. b8 r9 M 2、保存为:AC_RunActiveContent.js , |3 k/ q2 C8 e: T; @. Y: l- r: _) X/ g* w4 b 3、在所需的页面中添加; & T0 b; ^4 E# `3 p B : ~$ l6 K6 F$ N% n& f5 b) }1 R) {$ q<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script> ! ]4 S" P4 D# T! {, G' ~; f1 q" Q2 y) u! E x 4、在插入FLASH的位置添加: 7 Y- P. w4 d6 n0 O: X/ y) v0 ^: v. t f# ~' G: O5 j. r<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># q; |9 p2 r! G& y$ l <noscript>( o# Q P( e9 R. T" Q <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">: Q+ m3 p! P J) n5 V <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/index.swf">- j# h( Z) u# a" U" y <param name="quality" value="high"> ( P$ r6 ^$ Q1 ]- D% e2 D& y<param name="wmode" value="transparent">1 N1 K# A9 Z7 k/ X% \ <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> , ?& o% F, T7 P3 W+ G</object>/ O' P& E" ^, n3 r. E0 G </noscript> 0 V7 c; Y7 G ?6 L" ~. Z+ g0 x9 N5 Q; M1 Q0 h. o8 h I- h 5、页面中的完整代码: , A* `5 I0 G2 |3 j& P7 l& k4 J# A7 \7 \! s$ u; }1 { C <html>5 f2 n/ o2 l5 V; {) P( A0 n <head> 4 }- l3 ~4 Q7 P<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> # `# l- g8 }7 n$ d" G9 E/ X<title>IE中的Flash出现激活框“单击以激活并使用此控件”的解决方法</title> - E; u d) }( a5 ~) ]<!--加载AC_RunActiveContent.js,此为DW自动生成的文件,无需修改,更改文件目录的时候记得修改这里的路径--> 9 t+ J7 [$ H$ p4 o; D<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>* D* R1 d5 D; \/ F6 K1 x" G <style type="text/css">4 C& A" l" H; k( d' |* m <!--# n, v4 x a5 h- G9 ` body { 0 l3 W' } s% k background-color: #CCCCCC; & s3 X7 c% y# O8 w a/ A7 h} 8 \1 Y7 U; c( ]$ c: A9 }8 o-->5 P- [' T: ]9 @6 X </style></head>5 J: J; G1 x5 t3 k1 U <body> 3 o. c4 i) ]: I1 a V7 v& ?9 D" `$ h0 c1 X; G* T+ w8 z( k <!--下面这段JS修改的时候要注意,一共要修改四个地方: 1 C; Y! d6 e" B300 是宽度;* L7 ]# D8 Y; L4 }2 D2 e# D 200 是高度;7 B5 u' b9 [2 t images/killIEBorder 是路径和文件名,修改时注意,共有两处,还要特别注意,文件名后面不要加“.swf”,此后缀已经写在AC_RunActiveContent.js中--> 8 y" _7 v0 @6 [8 G, 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','300','height','200','src','images/killIEBorder','quality','high','pluginspage','http://www.macromedia.com/go/getflashplayer','wmode','transparent','movie','images/killIEBorder' ); //end AC code</script> / O/ b7 d+ h) `) Q7 x<!--遇到浏览器禁用javascript时将调用下面这段<noscript></noscript>内的代码,就是Dreamweaver升级到8.0.2之前我们插入flash时的那段代码。<param> 标签针对IE起作用,<embed> 标签针对Firefox和Netscape起作用。-->( ?, ~) y3 J5 J! ~5 ~+ t* _ <noscript>; u: \9 k1 V# 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">4 p+ V' M4 T" l8 b <param name="movie" value="http://www.webjx.com/htmldata/2007-04-22/images/killIEBorder.swf">+ L( m0 G% g! G2 |6 X6 v <param name="quality" value="high"> 4 k( O2 ^! |* X) y/ q" X4 u/ R, E <param name="wmode" value="transparent"> $ k6 T$ b' o4 F& h! W( a <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> % s& F! z, j) h9 v Z</object> } ?8 }, C7 H+ p! B</noscript>
遨海湾-心灵的港湾 www.aosea.com
回复

使用道具 举报

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

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

相信很多站长都遇到同我一样的问题吧?做了一个FLASH出来,但不激活,效果出不来,或者做个FLASH的导航,但要激活才点到按钮,给人一个双击的感觉不好吧! ' `6 T% r- I) A; y# t1 `  今天,我做CrazyStar时,就首页上就出现三个FLASH(初步设计)。都要激活?我晕! $ E; I0 F1 K: D# Q! q" s8 \  终于,找到了一个JavaScript小程序,可以让FLASH实现自动激活!!并实现屏蔽右键上的放大缩小调质量等功能!: F0 G1 ?7 t! T. n   不敢独享,先建一个JS文件,写入以下代码:6 W% X5 o {! U& d* z( z8 g# ~ & y4 g' @9 O t- g, U
  1. function al(){2 c1 u' {) k, f( o3 u" J9 c
  2. alert('ok'); 0 `; C% p. G4 i: r) G7 [+ v4 U
  3. } # B% p) ^; e( t. W: V: l2 H
  4. function AC_AddExtension(src, ext)& O" M5 P- R! f
  5. { * ?8 `5 l. c6 a- j; O
  6. if (src.indexOf('?') != -1)5 y3 j" I9 o- H0 y' t l/ u
  7. return src.replace(/\?/, ext+'?'); Q3 I+ e' D1 C6 c6 h
  8. else 7 ~. [ m8 c( \* V* x u1 i" x/ H3 Q
  9. return src + ext; 7 l( g& P, O" k/ v5 K' }+ o
  10. }function AC_Generateobj(objAttrs, params, embedAttrs) 7 y. M j! N# G8 s' u. m
  11. { 2 @- t( z, i2 M% ^ k- k
  12. var str = '&lt;object '; ; }6 w* H; B( R8 O1 O' ^; J) X
  13. for (var i in objAttrs): c$ J, N( p( H( C
  14. str += i + '=&quot;' + objAttrs[i] + '&quot; ';/ d+ i5 n, c7 A8 ]
  15. str += '&gt;';" N( M2 c. }9 l
  16. for (var i in params). W+ E: ~5 W* y- a1 p# ~
  17. str += '&lt;param name=&quot;' + i + '&quot; value=&quot;' + params[i] + '&quot; /&gt; '; " P" l9 \* [ x2 Y! N1 P& k
  18. str += '&lt;param name=&quot;menu&quot; value=&quot;false&quot;&gt; &lt;embed '; % L, r% D6 j V
  19. for (var i in embedAttrs)0 ` i+ k. a/ y9 D6 J9 y6 L" G
  20. str += i + '=&quot;' + embedAttrs[i] + '&quot; ';/ c6 q7 Z p+ k7 E- z
  21. str += ' &gt;&lt;/embed&gt;&lt;/object&gt;'; document.write(str); $ Z+ D ^( E, B& h7 q5 b" d- g$ h
  22. }function AC_FL_RunContent(){ 2 m$ k1 h& |5 z) G* V6 f6 _* ?& @
  23. var ret = ( e2 b; G7 M& r( G
  24. AC_GetArgs ) C$ r8 e5 h0 i& [) q0 ^* k' B
  25. ( arguments, &quot;.swf&quot;, &quot;movie&quot;, &quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; Q$ U* _' R8 X/ M
  26. , &quot;application/x-shockwave-flash&quot;3 n! ~6 ^( n! y" e' R: [0 w
  27. );2 D3 H: K: n L& f, S
  28. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); 1 R7 z6 X: _& ?$ D1 P& j0 G: g
  29. }function AC_SW_RunContent(){. ?( ?$ I. i# `6 B
  30. var ret = , ~3 f" T* {3 q0 |9 J
  31. AC_GetArgs 0 {8 D0 {; o. Z' I% R* {7 A
  32. ( arguments, &quot;.dcr&quot;, &quot;src&quot;, &quot;clsid:166B1BCA-3F9C-11CF-8075-444553540000&quot; 5 m" v2 x3 M0 {2 Q; `8 ?
  33. , null , v/ |' ~7 w+ g6 t, |
  34. );* c7 `: }% z' g. X+ i5 [
  35. AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs); % R" l, S- Y. M" ~, n# m+ S
  36. }function AC_GetArgs(args, ext, srcParamName, classid, mimeType){ ) Y' k4 o( P G" m- }6 B
  37. var ret = new Object(); $ g; `4 f. l" b; I. w2 H) U& o8 i
  38. ret.embedAttrs = new Object(); 3 T2 P0 w8 K4 v0 F) f/ `1 j
  39. ret.params = new Object();% p( |, o! P0 f! j% b
  40. ret.objAttrs = new Object();6 V6 C. D. ^: b" D- `1 F- v
  41. for (var i=0; i &lt; args.length; i=i+2){ : U5 |& p" o# F
  42. var currArg = args[i].toLowerCase(); switch (currArg){ ' ?; n' H. l: i n
  43. case &quot;classid&quot;:5 ?. P3 W. `" {$ S
  44. break;$ X( e; e# K9 g; j1 w
  45. case &quot;pluginspage&quot;: . _, H& B8 H; b3 v% G7 o
  46. ret.embedAttrs[args[i]] = args[i+1];; h! J e `3 u" V
  47. break;1 W0 {4 n- B; F
  48. case &quot;src&quot;:* h0 T! [& _3 _8 f2 O
  49. case &quot;movie&quot;: 1 }! F- |9 p: {: A6 b3 ^1 h
  50. args[i+1] = AC_AddExtension(args[i+1], ext); 4 N/ O( H" N) J
  51. ret.embedAttrs[&quot;src&quot;] = args[i+1];0 O+ n2 k! j, @! J
  52. ret.params[srcParamName] = args[i+1]; 2 H! n1 q( n5 c+ O1 d. K1 _; t
  53. break;6 m' a8 p" a& a) d5 d2 ?; _" p! b
  54. case &quot;onafterupdate&quot;: 8 A6 N1 @( Q/ p( b3 U
  55. case &quot;onbeforeupdate&quot;: * K. S( ?! f1 |, P0 C/ `
  56. case &quot;onblur&quot;:1 I/ ?0 ?2 n. |# d; o, P$ Q
  57. case &quot;oncellchange&quot;: - j" m0 ^3 x; R! \) s
  58. case &quot;onclick&quot;:- v& Y# L' V y0 k4 c
  59. case &quot;ondblClick&quot;: 5 k9 }" y8 f2 R. U
  60. case &quot;ondrag&quot;:0 h7 e& `3 w8 e* b. ^1 Y
  61. case &quot;ondragend&quot;:/ n9 o ]7 g% |. S& j8 D
  62. case &quot;ondragenter&quot;: & g* U/ ]' }' M
  63. case &quot;ondragleave&quot;:+ T2 x( Z( Y( ~
  64. case &quot;ondragover&quot;: 6 ^& _* ^- y! N7 ~2 S9 a
  65. case &quot;ondrop&quot;: 4 w9 Q/ T' Y6 Z4 G
  66. case &quot;onfinish&quot;: & h2 a% l8 W) s: A7 b# J9 x0 W
  67. case &quot;onfocus&quot;: & z5 K- |/ I) k$ d( `8 @- \- M* R
  68. case &quot;onhelp&quot;: * F( X/ W6 X) y) }& j4 g+ X
  69. case &quot;onmousedown&quot;: & g$ d' |& [# z. o8 ^6 {9 [
  70. case &quot;onmouseup&quot;: 0 j& Q7 b; _5 v; x! o6 s
  71. case &quot;onmouseover&quot;: ) P3 l) ~' d$ x+ B
  72. case &quot;onmousemove&quot;: 3 Z& C5 f0 f/ T, m. F3 o( U
  73. case &quot;onmouseout&quot;: ) C7 F' f8 V* y
  74. case &quot;onkeypress&quot;: * J0 v' d( H' Z5 O9 M
  75. case &quot;onkeydown&quot;:0 q3 u+ o3 g( _3 ~* z
  76. case &quot;onkeyup&quot;: 8 `! s5 _) G5 A6 G5 n! O& g
  77. case &quot;onload&quot;: 3 }" ?! g9 X- C3 @4 C
  78. case &quot;onlosecapture&quot;:2 }: y! D6 O: `$ j5 v
  79. case &quot;onpropertychange&quot;:8 g7 b+ k# t4 e5 m
  80. case &quot;onreadystatechange&quot;: - H8 ]8 i: W* n' S
  81. case &quot;onrowsdelete&quot;: 6 n* D* s3 p, W0 x; h! [; ]
  82. case &quot;onrowenter&quot;:. m; ?- ~6 }( o6 O& s0 s$ B1 D
  83. case &quot;onrowexit&quot;: ' J" I. s3 s3 K( X# f5 i- g
  84. case &quot;onrowsinserted&quot;:' Q7 w* K& |+ U8 S' Q8 I
  85. case &quot;onstart&quot;: - I" m- k& }/ O' y; O& ?+ h; x7 O
  86. case &quot;onscroll&quot;: 9 \) {$ g1 U# x3 c
  87. case &quot;onbeforeeditfocus&quot;:; e0 J; T) a( J6 h
  88. case &quot;onactivate&quot;:7 A. W7 A. X$ w& X) z6 D, `
  89. case &quot;onbeforedeactivate&quot;: 0 A V& P3 Q" k/ D: L3 d1 p- ]# I
  90. case &quot;ondeactivate&quot;: ; I( e; B4 w$ R H/ }$ X) L8 v
  91. case &quot;type&quot;:$ M: l" b2 L! l2 C! |
  92. case &quot;codebase&quot;:) A" p5 U G. b7 m# o
  93. ret.objAttrs[args[i]] = args[i+1];/ t/ f) Y7 I0 K: P- o: {1 _" o, t0 p( X4 a
  94. break; ( v3 K; \. \) S5 S1 H
  95. case &quot;width&quot;:, p; l4 Y+ m. D6 |
  96. case &quot;height&quot;: 0 |( m9 u+ e" X8 u/ K" M0 ]) z
  97. case &quot;align&quot;: + x6 J9 T/ ]+ u' L: ]: u
  98. case &quot;vspace&quot;: 0 q% _$ V- ]" C0 e
  99. case &quot;hspace&quot;: , C4 V8 U9 @# n' r& r4 w, g$ j. |0 E7 a
  100. case &quot;class&quot;:$ v4 S& {* h* H+ J L& |8 \5 E
  101. case &quot;title&quot;: ( x$ }3 y |+ l) Y7 A' z( [
  102. case &quot;accesskey&quot;:- J& W, I& N! N0 N! M
  103. case &quot;name&quot;: 5 n0 |- b' q+ @2 M2 W: b2 h9 [! @6 V& D0 C
  104. case &quot;id&quot;:9 ]2 a/ L' E1 H9 {
  105. case &quot;tabindex&quot;:5 b. ?* z; w3 ?; a9 A
  106. ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1]; 1 c; P, @( d2 Q. A/ w
  107. break;8 E0 m( |4 D! y: i+ u/ C3 q* {
  108. default:% E2 R+ W% z1 `
  109. ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];0 F7 y( w/ R5 I* U; u' p& j/ b5 _
  110. }- Z$ Q+ j+ ]2 P I* \
  111. } ( ]% q; l" m5 O8 h% D- p0 N9 E
  112. ret.objAttrs[&quot;classid&quot;] = classid; ' y+ r8 e% O+ c+ g
  113. if (mimeType) ret.embedAttrs[&quot;type&quot;] = mimeType; / T1 \! E* p: S
  114. return ret; - C9 F, s( a! O& J5 Z
  115. } 1 Q4 a9 R' [" e4 ]4 e( r
  116.   
复制代码
) ^, E4 `% p* T5 c* ?然后在要实现这个功能的页面上,调用这个JS:) [- Y# ^5 Z, s$ H0 I, @ ; d7 x1 X% Q4 |* f
  1. &lt;script type=&quot;text/javascript&quot; src=&quot;这个JS所在的路径&quot;&gt;&lt;/script&gt;
复制代码
  3 Q, d0 m* Q4 f9 q% K& ]* p + A( f* p/ T, c然后,插入FLASH的地方,就不是像之前这样了,要换成以下的代码:" R/ W, v9 s+ e5 k; J8 e9 c ' f" I" R9 e9 u0 p. a0 w2 P
  1. &lt;script type=&quot;text/javascript&quot;&gt; / p. S- a g& q" G6 @0 b2 P
  2. AC_FL_RunContent( 9 R* h2 }4 B: q0 G3 Z9 S0 w% B4 S3 ?+ ?
  3. 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0'( a! k2 t9 X- w
  4. ,'width','524' //FLASH文件的宽* y" j7 N; w) H, D/ w. h
  5. ,'height','55' //FLASH文件的高 / X+ [5 H& M! @ i
  6. ,'src','swf/top' //FLASH文件的位置,不要后面的.swf 6 V' A- p; C) O- S; ~5 g
  7. ,'quality','high' //FLASH文件的默认质量 & t+ F7 G; R9 d) P! E! ^. T
  8. ,'pluginspage' 0 I: r t6 M% I) Y
  9. ,'http://www.macromedia.com/go/getflashplayer' / Q: z2 C6 Y) r- W% R( W0 [' i/ J: A
  10. ,'movie','swf/top' //FLASH文件的位置,不要后面的.swf,和上面的要一样 ( s6 ]! A* S1 U4 h/ Q$ I* s: }
  11. );5 @" _; \* G7 u" I6 v
  12. &lt;/script&gt; & @& s- P. T+ J. M9 T
  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 22:52

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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