Archive

For the Flex category

flash使用FlashVars接收html参数

No Comments

<br /> <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”><br/><br /> <!– saved from url=(0014)about:internet –><br/><br /> <html xmlns=”http://www.w3.org/1999/xhtml” lang=”en” xml:lang=”en”>    <br/><br /> <!– <br/><br /> Smart developers always View Source. <br/><br/><br /> This application was built using Adobe Flex, an open source framework<br/><br /> for building rich Internet applications that get delivered via the<br/><br /> Flash Player or to desktops via Adobe AIR. <br/><br/><br /> Learn more about Flex at http://flex.org <br/><br /> // –><br/><br /> <head><br/><br /> <title></title>         <br/><br /> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /><br/><br /> <!– Include CSS to eliminate any default margins/padding and set the height of the html element and <br/><br /> the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as <br/><br /> the percentage of the height of its parent container, which has to be set explicitly.  Initially, <br/><br /> don’t display flashContent div so it won’t show if JavaScript disabled.<br/><br /> –><br/><br /> <style type=”text/css” media=”screen”> <br/><br /> html, body    { height:100%; }<br/><br /> body { margin:0; padding:0; overflow:auto; text-align:center; <br/><br /> background-color: #faf8fb; }   <br/><br /> #flashContent { display:none; }<br/><br /> </style><br/><br/><br /> <!– Enable Browser History by replacing useBrowserHistory tokens with two hyphens –><br/><br /> <!– BEGIN Browser History required section –><br/><br /> <link rel=”stylesheet” type=”text/css” href=”history/history.css” /><br/><br /> <script type=”text/javascript” src=”history/history.js”></script><br/><br /> <!– END Browser History required section –>  <br/><br/><br /> <script type=”text/javascript” src=”swfobject.js”></script><br/><br /> <script type=”text/javascript”><br/><br /> <!– For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. –> <br/><br /> var swfVersionStr = “10.0.0″;<br/><br /> <!– To use express install, set to playerProductInstall.swf, otherwise the empty string. –><br/><br /> var xiSwfUrlStr = “playerProductInstall.swf”;<br/><br /> var flashvars = {pa1:”美女”};<br/><br /> var params = {};<br/><br /> params.quality = “high”;<br/><br /> params.bgcolor = “#faf8fb”;<br/><br /> params.allowscriptaccess = “sameDomain”;<br/><br /> params.allowfullscreen = “true”;<br/><br /> var attributes = {};<br/><br /> attributes.id = “flphpoto”;<br/><br /> attributes.name = “flphpoto”;<br/><br /> attributes.align = “middle”;<br/><br /> swfobject.embedSWF(<br/><br /> “flphpoto.swf”, “flashContent”, <br/><br /> “100%”, “100%”, <br/><br /> swfVersionStr, xiSwfUrlStr, <br/><br /> flashvars, params, attributes);<br/><br /> <!– JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. –><br/><br /> swfobject.createCSS(“#flashContent”, “display:block;text-align:left;”);<br/><br /> </script><br/><br /> </head><br/><br /> <body><br/><br /> <!– SWFObject’s dynamic embed method replaces this alternative HTML content with Flash content when enough <br/><br /> JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn’t show<br/><br /> when JavaScript is disabled.<br/><br /> –><br/><br /> <div id=”flashContent”><br/><br /> <p><br/><br /> To view this page ensure that Adobe Flash Player version <br/><br /> 10.0.0 or greater is installed. <br/><br /> </p><br/><br /> <script type=”text/javascript”> <br/><br /> var pageHost = ((document.location.protocol == “https:”) ? “https://” :    “http://”); <br/><br /> document.write(“<a href=’http://www.adobe.com/go/getflashplayer’><img src=’” <br/><br /> + pageHost + “www.adobe.com/images/shared/download_buttons/get_flash_player.gif’ alt=’Get Adobe Flash player’ /></a>” ); <br/><br /> </script> <br/><br /> </div><br/><br/><br /> <noscript><br/><br /> <object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ width=”100%” height=”100%” id=”flphpoto”><br/><br /> <param name=”movie” value=”flphpoto.swf” /><br/><br /> <param name=”quality” value=”high” /><br/><br /> <param name=”bgcolor” value=”#faf8fb” /><br/><br /> <param name=”allowScriptAccess” value=”sameDomain” /><br/><br /> <param name=”allowFullScreen” value=”true” /><br/><br /> <!–[if !IE]>–><br/><br /> <object type=”application/x-shockwave-flash” data=”flphpoto.swf” width=”100%” height=”100%”><br/><br /> <param name=”quality” value=”high” /><br/><br /> <param name=”bgcolor” value=”#faf8fb” /><br/><br /> <param name=”allowScriptAccess” value=”sameDomain” /><br/><br /> <param name=”allowFullScreen” value=”true” /><br/><br /> <!–<![endif]–><br/><br /> <!–[if gte IE 6]>–><br/><br /> <p> <br/><br /> Either scripts and active content are not permitted to run or Adobe Flash Player version<br/><br /> 10.0.0 or greater is not installed.<br/><br /> </p><br/><br /> <!–<![endif]–><br/><br /> <a href=”http://www.adobe.com/go/getflashplayer”><br/><br /> <img src=”http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif” alt=”Get Adobe Flash Player” /><br/><br /> </a><br/><br /> <!–[if !IE]>–><br/><br /> </object><br/><br /> <!–<![endif]–><br/><br /> </object><br/><br /> </noscript>        <br/><br /> </body><br/><br /> </html><br/><br/><br /> 然后flex中通过FlexGlobals.topLevelApplication.parameters.pa1来获取页面上面写的pa1参数的值</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1166" class="post-1166 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jul</span> <span class="post-day">16</span></div> <h2><a href="http://blog.517car.com/2010/07/16/flex4%e6%97%a0%e6%b3%95%e8%a7%a3%e6%9e%90%e7%94%a8%e4%ba%8e%e8%bd%ac%e6%8d%a2%e4%bb%a3%e7%a0%81/" rel="bookmark" title="Permanent Link to flex4无法解析用于转换代码">flex4无法解析用于转换代码</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2010/07/16/flex4%e6%97%a0%e6%b3%95%e8%a7%a3%e6%9e%90%e7%94%a8%e4%ba%8e%e8%bd%ac%e6%8d%a2%e4%bb%a3%e7%a0%81/#comments" title="Comment on flex4无法解析用于转换代码">1 Comment</a></span> </div> <div class="entry"> <p>代码片段:<br/><br /> source=”@Embed(‘img/font.png’)”<br/><br/><br /> 报错:<br/><br /> 无法解析用于转换代码的 “img/font.png” <br/><br /> 无法转换代码“img/font.png”。<br/><br/><br /> 不知道是什么原因,希望高手指点<br/><br/><br /> 补 充,只要使用了”@Embed(”)”都会抱这样的错误<br/><br /> 原来是如果使用@Embed就是在根目录寻找图片<br/><br /> 如果不加@Embed就会在bin-debug目录下面寻找图片</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1430" class="post-1430 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">12</span></div> <h2><a href="http://blog.517car.com/2009/06/12/rm%e3%80%81rmvb%e3%80%81rv%e3%80%81wmv9%e7%ad%89%e5%aa%92%e4%bd%93%e6%a0%bc%e5%bc%8f%e8%bd%ac%e6%8d%a2%e4%b8%baflv%e8%bd%ac%e8%bd%bd/" rel="bookmark" title="Permanent Link to RM、RMVB、RV、WMV9等媒体格式转换为FLV(转载)">RM、RMVB、RV、WMV9等媒体格式转换为FLV(转载)</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/12/rm%e3%80%81rmvb%e3%80%81rv%e3%80%81wmv9%e7%ad%89%e5%aa%92%e4%bd%93%e6%a0%bc%e5%bc%8f%e8%bd%ac%e6%8d%a2%e4%b8%baflv%e8%bd%ac%e8%bd%bd/#respond" title="Comment on RM、RMVB、RV、WMV9等媒体格式转换为FLV(转载)">No Comments</a></span> </div> <div class="entry"> <div> <p>原文作者: http://ken.bokele.com/?CH=8408&ViewID=24738<br/><br /> 大家都知道用FFMPEG可以转FLV,可以抓图,但是不支持RM,WMV9等格式,有人说可以实现支持RM,WMV9等,要自己开发,俺们不会编程,可怜,自己开发的事就别想了。那有什么方法可以支持所有格式在线转FLV呢,用一个软件转FLV的我不知道,但是我知道用Mencoder可以支持所有格式转AVI,再用FFMPEG来转FLV,并抓图等,虽然这个方法麻烦,但是也是一个可行的方案。也有人说可以用Mencoder直接转FLV,但是我还不知道怎么弄,等我知道时我一定告诉大家。现在下面贴出这个方案,是我实验成功的,如有不对的地方,请指教。<br/><br/><br /> 以下是需要的两个软件(google一下就能找到官方下载)<br/><br /> FFMPEG<br/><br /> Mencoder</p> <p>先从Mencoder这个开始,将所有格式转AVI,</p> <p>RMVB转AVI<br/><br /> mencoder 1.rmvb -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o rmvb.avi</p> <p>RM转AVI<br/><br /> mencoder 1.rm -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o rm.avi</p> <p>MPEG转AVI<br/><br /> mencoder mp4.mpeg -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o mp4.avi</p> <p>MOV转AVI<br/><br /> mencoder qtime.mov -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o qtime.avi</p> <p>WMV转AVI 包括WMV7到WMV9,只实验到WMV9<br/><br /> mencoder m7.wmv -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o m7.avi</p> <p>RV转AVI<br/><br /> mencoder 1.rv -oac mp3lame -lameopts preset=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o rv.avi</p> <p>等等……格式,参数不变,改文件名就好了。这里参数是什么意思,我目前还不懂,学习中,你可以在网上找找,找到告诉我啊,谢谢。</p> <p>接下来是FFMPEG上场。</p> <p>AVI转FLV<br/><br /> ffmpeg -i test.avi -ab 56 -ar 22050 -b 500 -r 15 -s 320×240 test.flv</p> <p>抓图JPG。<br/><br /> ffmpeg -i 2.wmv -y -f image2 -ss 8 -t 0.001 -s 350×240 test.jpg</p> <p>好,这样就实现命令行将所有格式转FLV了,我的进度只到这,接下来是应用方面的了,如何将以上的方法应用在服务器上呢,如ASP的话,用那个要WS。SHELL什么的调用,这方面的我还在调试中,等我调试完成,我在与大家分享我的成果,谢谢。十分鄙视那些说什么已经实所有格式转FLV,还要收费的,靠。资源要共享,我们才能发展,以后我们自己开发CPU,开发操作系统。</p> <p>好,我写完了,就到这,希望对你们有所帮助。有什么问题及不对的地方,请尽管提出,共同进步。</p> <p><br/> <p><small><span>You can follow any responses to this entry through the</span> <a href="http://www.toplee.com/blog/303.html/feed">RSS 2.0</a> <span>feed.</span> <span>You can </span><a href="http://www.toplee.com/blog/303.html#respond">leave a response</a>, <span>or</span> <a href="http://www.toplee.com/blog/303.html/trackback" rel="trackback">trackback</a> <span>from your own site.</span> </small></p> </div> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1431" class="post-1431 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">11</span></div> <h2><a href="http://blog.517car.com/2009/06/11/flex%e5%85%a8%e5%b1%8f%e6%a8%a1%e5%bc%8f%e8%ae%be%e7%bd%ae/" rel="bookmark" title="Permanent Link to Flex全屏模式设置">Flex全屏模式设置</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/11/flex%e5%85%a8%e5%b1%8f%e6%a8%a1%e5%bc%8f%e8%ae%be%e7%bd%ae/#respond" title="Comment on Flex全屏模式设置">No Comments</a></span> </div> <div class="entry"> <p style="text-indent: 2em">在浏览器中或独立的播放器中使用全屏模式,只需要下面两步即可</p> <p style="text-indent: 2em">1.写个方法,用来切换场景显示模式:</p> <p style="text-indent: 2em">public static function toggleDisplayState(stage:Stage):void</p> <p style="text-indent: 2em">{         stage.displayState = (stage.displayState == StageDisplayState.NORMAL?</p> <p style="text-indent: 2em">               StageDisplayState.FULL_SCREEN:StageDisplayState.NORMAL);   </p> <p style="text-indent: 2em">}  </p> </p> <p style="text-indent: 2em">2.修改flex工程中html-template目录下的index.template.html文件中的几个参数,如下</p> <p style="text-indent: 2em">前两个是坚持flash版本的函数AC_FL_RunContent的”allowScriptAccess”,”sameDomain”后面加上</p> <p style="text-indent: 2em">“allowFullScreen”,”true”</p> <p style="text-indent: 2em">“allowScriptAccess”,”sameDomain” ,”allowFullScreen”,”true”</p> <p style="text-indent: 2em">“allowScriptAccess”,”sameDomain” ,”allowFullScreen”,”true”</p> <p style="text-indent: 2em">    第三个是在<param name=”allowScriptAccess” value=”sameDomain” />后加上<br/><br />     <param name=”allowFullScreen” value=”true” /></p> <p style="text-indent: 2em">3.Application.application.stage.displayState = StageDisplayState.FULL_SCREEN;<br/><br /> //必须把它放到按钮或键盘事件中,否则在AS 2.0里会被忽略,AS 3.0里会抛出以下异常SecurityError: Error #2152: 不允许使用全屏模式。at flash.display::Stage/set displayState(), 同时全屏下 Flash 文本框无法输入,设计界面请勿支持全屏,而且全屏下做不到屏蔽右键的功能</p> <p style="text-indent: 2em">如下代码</p> <p style="text-indent: 2em"> <p style="text-indent: 2em"> <p style="text-indent: 2em"><!– saved from url=(0014)about:internet –><br/><br /> <html lang=”en”></p> <p style="text-indent: 2em"><!– <br/><br /> Smart developers always View Source.</p> <p style="text-indent: 2em">This application was built using Adobe Flex, an open source framework<br/><br /> for building rich Internet applications that get delivered via the<br/><br /> Flash Player or to desktops via Adobe AIR.</p> <p style="text-indent: 2em">Learn more about Flex at <a href="http://flex.org/">http://flex.org</a> <br/><br /> // –></p> <p style="text-indent: 2em"><head><br/><br /> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /></p> <p style="text-indent: 2em"><!– BEGIN Browser History required section –><br/><br /> <link rel=”stylesheet” type=”text/css” href=”history/history.css” /><br/><br /> <!– END Browser History required section –></p> <p style="text-indent: 2em"><title></title><br/><br /> <script src=”AC_OETags.js” language=”javascript”></script></p> <p style="text-indent: 2em"><!– BEGIN Browser History required section –><br/><br /> <script src=”history/history.js” language=”javascript”></script><br/><br /> <!– END Browser History required section –></p> <p style="text-indent: 2em"><style><br/><br /> body { margin: 0px; overflow:hidden }<br/><br /> </style><br/><br /> <script language=”JavaScript” type=”text/javascript”><br/><br /> <!–<br/><br /> // —————————————————————————–<br/><br /> // Globals<br/><br /> // Major version of Flash required<br/><br /> var requiredMajorVersion = 9;<br/><br /> // Minor version of Flash required<br/><br /> var requiredMinorVersion = 0;<br/><br /> // Minor version of Flash required<br/><br /> var requiredRevision = 28;<br/><br /> // —————————————————————————–<br/><br /> // –><br/><br /> </script><br/><br /> </head></p> <p style="text-indent: 2em"><body scroll=”no”><br/><br /> <script language=”JavaScript” type=”text/javascript”><br/><br /> <!–<br/><br /> // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)<br/><br /> var hasProductInstall = DetectFlashVer(6, 0, 65);</p> <p style="text-indent: 2em">// Version check based upon the values defined in globals<br/><br /> var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);</p> <p style="text-indent: 2em">if ( hasProductInstall && !hasRequestedVersion ) {<br/><br /> // DO NOT MODIFY THE FOLLOWING FOUR LINES<br/><br /> // Location visited after installation is complete if installation is required<br/><br /> var MMPlayerType = (isIE == true) ? “ActiveX” : “PlugIn”;<br/><br /> var MMredirectURL = window.location;<br/><br />     document.title = document.title.slice(0, 47) + ” – Flash Player Installation”;<br/><br />     var MMdoctitle = document.title;</p> <p style="text-indent: 2em"> AC_FL_RunContent(<br/><br />    “src”, “playerProductInstall”,<br/><br />    “FlashVars”, “MMredirectURL=”+MMredirectURL+’&MMplayerType=’+MMPlayerType+’&MMdoctitle=’+MMdoctitle+”",<br/><br />    “width”, “100%”,<br/><br />    “height”, “100%”,<br/><br />    “align”, “middle”,<br/><br />    “id”, “FullScreen”,<br/><br />    “quality”, “high”,<br/><br />    “bgcolor”, “#869ca7″,<br/><br />    “name”, “FullScreen”,<br/><br />    “allowScriptAccess”,”sameDomain”,<br/><br />         “allowFullScreen”,”true”,<br/><br />    “type”, “application/x-shockwave-flash”,<br/><br />    “pluginspage”, “<a href="http://www.adobe.com/go/getflashplayer">http://www.adobe.com/go/getflashplayer</a>“<br/><br /> );<br/><br /> } else if (hasRequestedVersion) {<br/><br /> // if we’ve detected an acceptable version<br/><br /> // embed the Flash Content SWF when all tests are passed<br/><br /> AC_FL_RunContent(<br/><br />     “src”, “FullScreen”,<br/><br />     “width”, “100%”,<br/><br />     “height”, “100%”,<br/><br />     “align”, “middle”,<br/><br />     “id”, “FullScreen”,<br/><br />     “quality”, “high”,<br/><br />     “bgcolor”, “#869ca7″,<br/><br />     “name”, “FullScreen”,<br/><br />     “allowScriptAccess”,”sameDomain”,<br/><br />     “allowFullScreen”,”true”,<br/><br />     “type”, “application/x-shockwave-flash”,<br/><br />     “pluginspage”, “<a href="http://www.adobe.com/go/getflashplayer">http://www.adobe.com/go/getflashplayer</a>“<br/><br /> );<br/><br /> } else { // flash is too old or we can’t detect the plugin<br/><br />     var alternateContent = ‘Alternate HTML content should be placed here. ‘<br/><br /> + ‘This content requires the Adobe Flash Player. ‘<br/><br />    + ‘<a href=http://www.adobe.com/go/getflash/>Get Flash</a>’;<br/><br />     document.write(alternateContent); // insert non-flash content<br/><br /> }<br/><br /> // –><br/><br /> </script><br/><br /> <noscript><br/><br /> <object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″<br/><br />     id=”FullScreen” width=”100%” height=”100%”<br/><br />     codebase=”<a href="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab</a>“><br/><br />     <param name=”movie” value=”FullScreen.swf” /><br/><br />     <param name=”quality” value=”high” /><br/><br />     <param name=”bgcolor” value=”#869ca7″ /><br/><br />     <param name=”allowScriptAccess” value=”sameDomain” /><br/><br />     <param name=”allowFullScreen” value=”true” /><br/><br />     <embed src=”FullScreen.swf” quality=”high” bgcolor=”#869ca7″<br/><br />      width=”100%” height=”100%” name=”FullScreen” align=”middle”<br/><br />      play=”true”<br/><br />      loop=”false”<br/><br />      quality=”high”<br/><br />      allowScriptAccess=”sameDomain”<br/><br />      type=”application/x-shockwave-flash”<br/><br />      pluginspage=”<a href="http://www.adobe.com/go/getflashplayer">http://www.adobe.com/go/getflashplayer</a>“><br/><br />     </embed><br/><br /> </object><br/><br /> </noscript><br/><br /> </body><br/><br /> </html></p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1432" class="post-1432 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">11</span></div> <h2><a href="http://blog.517car.com/2009/06/11/%e5%85%b3%e4%ba%8eflex%e5%ae%89%e5%85%a8%e6%b2%99%e7%ae%b1%e9%97%ae%e9%a2%98%e7%9a%84%e8%a7%a3%e5%86%b3-%e8%bd%ac%e8%bd%bd/" rel="bookmark" title="Permanent Link to 关于Flex安全沙箱问题的解决 (转载)">关于Flex安全沙箱问题的解决 (转载)</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/11/%e5%85%b3%e4%ba%8eflex%e5%ae%89%e5%85%a8%e6%b2%99%e7%ae%b1%e9%97%ae%e9%a2%98%e7%9a%84%e8%a7%a3%e5%86%b3-%e8%bd%ac%e8%bd%bd/#respond" title="Comment on 关于Flex安全沙箱问题的解决 (转载)">No Comments</a></span> </div> <div class="entry"> <p>最近遇到了flex 的安全沙箱问题,找了很多资料发现不是都是和我,我的程序需要socket连接,而大多数讲的都是跨域文件读取的。我先把两种方法都总结出来:</p> <p>跨域文件读取</p> <p>方法一:在目标服务器上布署crossdomain.xml文件(我用的此方法很管用,放上就没问题了) 需要远程服务根目录定义有crossdomain.xml文件,如下:</p> <p><?xml version=”1.0″ encoding=”UTF-8″ ?> <cross-domain-policy>     <allow-access-from domain=”*”/> </cross-domain-policy></p> <p>方法二:使用代理,把Flex要访问的远程文件通过asp, php, jsp等脚本读取到本地,然后再由Flex去访问;</p> <p>方法三:使用Adobe flash player 9 打开程序后,点击菜单栏中文件->创建播放器…即生成exe文件,运行exe文件即可突破安全限制;</p> <p>方法四:     1、找到这个文件夹:c:\Documents and Settings\<UserName>\Application         Data\Macromedia\Flash Player\#Security     2、在其下建立一个名为”FlashPlayerTrust”的文件夹     3、在”FlashPlayerTrust”文件夹下新建一TXT文件,内容如下:         c:\         d:\         e:\         f:\     4、将该txt文件命名为:”myTrustFiles.cfg”     再打开你硬盘里的SWF文件,就不会出现那个烦人的安全设置提示窗口了!</p> <p>方法五: 用HttpService它默认是有Proxy的,需要配置flex-config.xml,里面有一段: <http-service-proxy>      <whitelist>         ………………     </whitelist> </http-service-proxy></p> <p>这个是白名单,一般情况下是注释掉的,也就是默认只有本地的<a href="http://%7blocalserver%7d/">http://{localserver}/</a>*和<a href="https://%7blocalserver%7d/">https://{localserver}/</a>*可以访问。其他的需要在flex-config.xml里的自行修改成需要的就可以了。</p> <p>访问本地自然不会跨域,不过你肯定访问局域网其他机器了,所以是依照白名单规则,属于跨域</p> </p> <p>Socket沙箱问题</p> <p>在Flex中使用Socket进行通信时,也会受到Flash9的新安全策略的困扰. 解决方法不能像在Web服务器中布置一个crossdomain.xml来解决,或是在服务器上专门开启843端口来提供安全策略. 有一种方法就是在接收到客户端的连接后,向其发送 安全策略.</p> <p>比如我是用JAVA来开发, 客户端的Flex会先搜索同域,及服务器的843口,看是否能得到安全策略,这时候Socket是先建立好的,可以在接收到Socket ,即Accept事件发生是,马上向其发送 策略串,否则客户端就会因为安全策略不过关,于断开, 如果成功获取策略,则客户端将断掉先前的那次Socket, 再真正进行程序中你要求的Socket连接请求.</p> <p>下面看看我找的例子吧!</p> <p>public void run() { <br/><br /> ServerSocket ss; <br/><br /> String ip = “”; <br/><br /> try { <br/><br /> ip = InetAddress.getLocalHost().getHostAddress(); <br/><br /> } catch (UnknownHostException e1) { <br/><br /> e1.printStackTrace(); <br/><br /> } <br/><br /> String xml = “<cross-domain-policy><site-control permitted-cross-domain-policies=\”all\”/>”; <br/><br /> xml = xml + “<allow-access-from domain=\”" + ip + “\” to-ports=\”1234\” />”; <br/><br /> xml = xml + “</cross-domain-policy>”;</p> <p>try { <br/><br /> ss = new ServerSocket(port); <br/><br /> while (!cancle) { <br/><br /> Socket s = ss.accept();</p> <p>BufferedReader br = new BufferedReader(new InputStreamReader(s <br/><br /> .getInputStream(), “UTF-8″)); <br/><br /> PrintWriter pw = new PrintWriter(s.getOutputStream()); <br/><br /> char[] by = new char[22]; <br/><br /> br.read(by, 0, 22); <br/><br /> String head = new String(by); <br/><br />                                      //判断是不是第一求请求连接的安全验证,当客户端连socket时,as3会自动向服务端发送<policy-file-request/>这个字符串请求返回策略文件,所以当服务器收到这个串后给client返回就好了。<br/><br />                                            //如果是返回xML信息 <br/><br /> if (head.equals(“<policy-file-request/>”)) { <br/><br /> System.out.println(“连接服务器”); <br/><br /> pw.print(xml + “\0″); <br/><br /> pw.flush(); <br/><br /> br.close(); <br/><br /> pw.close(); <br/><br /> } else { <br/><br />                //你自己的正常请求处理逻辑 <br/><br /> }</p> <p>} <br/><br /> ss.close(); <br/><br /> } catch (IOException e) { <br/><br /> e.printStackTrace(); <br/><br /> } <br/><br /> }</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1433" class="post-1433 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">11</span></div> <h2><a href="http://blog.517car.com/2009/06/11/%e8%b0%83%e8%af%95%e5%99%a8%e6%88%96%e4%b8%bb%e6%9c%ba%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e6%ad%a3%e5%9c%a8%e4%bd%95%e5%a4%84%e8%bf%90%e8%a1%8c/" rel="bookmark" title="Permanent Link to 调试器或主机应用程序正在何处运行">调试器或主机应用程序正在何处运行</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/11/%e8%b0%83%e8%af%95%e5%99%a8%e6%88%96%e4%b8%bb%e6%9c%ba%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e6%ad%a3%e5%9c%a8%e4%bd%95%e5%a4%84%e8%bf%90%e8%a1%8c/#respond" title="Comment on 调试器或主机应用程序正在何处运行">No Comments</a></span> </div> <div class="entry"> <p>目前的解决方法<br/><br/><br /> 在项目的属性中的compiler中<br/><br/><br /> 在additional compiler arguments中<br/><br/><br /> 加入参数 -debug=false<br/><br/><br /> 就不会在提示了<br/></p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1434" class="post-1434 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">10</span></div> <h2><a href="http://blog.517car.com/2009/06/10/flex%e6%89%93%e5%bc%80%e6%96%b0%e7%9a%84%e7%bd%91%e9%a1%b5/" rel="bookmark" title="Permanent Link to flex打开新的网页">flex打开新的网页</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/10/flex%e6%89%93%e5%bc%80%e6%96%b0%e7%9a%84%e7%bd%91%e9%a1%b5/#respond" title="Comment on flex打开新的网页">No Comments</a></span> </div> <div class="entry"> <p>   navigateToURL(<span class="keyword"><strong><font color="#006699">new</font></strong></span><span> URLRequest(</span><span class="string"><font color="#0000ff"><a href="http://www.google.com/">http://www.google.com</a></font></span><span>), </span><span class="string"><font color="#0000ff">“_blank”</font></span><span>);   </span></p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1435" class="post-1435 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">09</span></div> <h2><a href="http://blog.517car.com/2009/06/09/%e5%85%b3%e4%ba%8e%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92%e5%92%8c%e5%80%bc%e4%bc%a0%e9%80%92%e7%9a%84%e6%80%bb%e7%bb%93/" rel="bookmark" title="Permanent Link to 关于引用传递和值传递的总结">关于引用传递和值传递的总结</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/09/%e5%85%b3%e4%ba%8e%e5%bc%95%e7%94%a8%e4%bc%a0%e9%80%92%e5%92%8c%e5%80%bc%e4%bc%a0%e9%80%92%e7%9a%84%e6%80%bb%e7%bb%93/#respond" title="Comment on 关于引用传递和值传递的总结">No Comments</a></span> </div> <div class="entry"> <p>java中的基本数据类型和String是按值传递之外 其它默认都是引用传递</p> <p>因为java中String被设计为不可修改的类型,也就是对String对象的任何修改都将重新创建一个对象而放弃以前的内存空间的引用!所以String是值传递</p> </p> <p>php5中默认对象是引用传递,其它的都是值传递(其它的可以前面加个&使其也引用传递)</p> <p>flex中默认对象是引用传递,其它的都是值传递</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1436" class="post-1436 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">09</span></div> <h2><a href="http://blog.517car.com/2009/06/09/amfphp%e5%ae%9e%e4%be%8b/" rel="bookmark" title="Permanent Link to amfphp实例">amfphp实例</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/09/amfphp%e5%ae%9e%e4%be%8b/#respond" title="Comment on amfphp实例">No Comments</a></span> </div> <div class="entry"> <p><?xml version=”1.0″ encoding=”utf-8″?><br/><br /> <mx:Application xmlns:mx=”<a href="http://www.adobe.com/2006/mxml">http://www.adobe.com/2006/mxml</a>” layout=”absolute” creationComplete=”init()”><br/><br /> <mx:Script><br/><br />    <![CDATA[<br/><br />     import flash.net.NetConnection;<br/><br />     import flash.net.Responder;<br/><br />     import mx.controls.Alert;<br/><br />     public function init():void{<br/><br />      var nc:NetConnection=new NetConnection();<br/><br />      nc.connect('http://127.0.0.1/amfphp/gateway.php');<br/><br />      var res:Responder=new Responder(onResult,onFault);<br/><br />      nc.call('mmxcq.HelloWorld.sayHello',res);<br/><br />      nc.close();/*关闭连接*/<br/><br />     }<br/><br />     private function onResult(responds:Object):void{<br/><br />      Alert.show('成功调用'+responds.toString());<br/><br />     }<br/><br />     private function onFault(responds:Object):void{<br/><br />      for(var i:String in responds){<br/><br />       Alert.show(responds[i]);<br/><br />      }<br/><br />     }<br/><br />    ]]><br/><br /> </mx:Script><br/><br /> </mx:Application><br/></p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1437" class="post-1437 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">Jun</span> <span class="post-day">08</span></div> <h2><a href="http://blog.517car.com/2009/06/08/flex-builder-1037%e5%8c%85%e4%b8%8d%e8%83%bd%e5%b5%8c%e5%a5%97/" rel="bookmark" title="Permanent Link to flex builder 1037:包不能嵌套">flex builder 1037:包不能嵌套</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/06/08/flex-builder-1037%e5%8c%85%e4%b8%8d%e8%83%bd%e5%b5%8c%e5%a5%97/#respond" title="Comment on flex builder 1037:包不能嵌套">No Comments</a></span> </div> <div class="entry"> <p><br/><a href="http://bbs.airia.cn/FLEX/thread-6219-1-1.aspx">http://bbs.airia.cn/FLEX/thread-6219-1-1.aspx</a> 麻烦各位朋友帮我看看阿 谢谢了</p> <p>主要是mxml最终还是会编译为as进行处理,所以一个主程序是在默认的命名空间下编译为类文件的,再实例化,所以直接采用script是相当于include方式,这是将一个外部类完整的导进来,相当于将外面的代码复制进来再生成一个完整的代码,所以会出现这种错误,你应该使用import引入这个对象,而不是使用include,import可以导入不同包内的对象</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1452" class="post-1452 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">May</span> <span class="post-day">13</span></div> <h2><a href="http://blog.517car.com/2009/05/13/%e5%9c%a8flex%e4%b8%ad%e4%bd%bf%e7%94%a8css%e8%bd%ac%e8%bd%bd/" rel="bookmark" title="Permanent Link to 在Flex中使用CSS(转载)">在Flex中使用CSS(转载)</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/05/13/%e5%9c%a8flex%e4%b8%ad%e4%bd%bf%e7%94%a8css%e8%bd%ac%e8%bd%bd/#respond" title="Comment on 在Flex中使用CSS(转载)">No Comments</a></span> </div> <div class="entry"> <p><font color="#0000ff"><strong>一.使用<mx:Style>标签</strong></font></p> <div class="code_title">xml 代码</div> <div class="dp-highlighter"> <div class="bar"> <ol class="dp-xml"> <li class="alt"><span><span class="tag"><?</span><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">“1.0″</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">“utf-8″</span><span class="tag">?></span><span>  </span></span></li> <li><span><span class="tag"><</span><span class="tag-name">mx:Application</span><span> </span><span class="attribute">xmlns:mx</span><span>=</span><span class="attribute-value">“http://www.adobe.com/2006/mxml”</span><span> </span><span class="attribute">layout</span><span>=</span><span class="attribute-value">“absolute”</span><span class="tag">></span><span>  </span> </span></li> <li class="alt"><span>       </span></li> <li><span>    </span><span class="tag"><</span><span class="tag-name">mx:Style</span><span class="tag">></span><span>  </span></li> <li class="alt"><span>         Button {   </span></li> <li><span>            color: #ff0000;   </span></li> <li class="alt"><span>            borderColor: #cccccc;   </span></li> <li><span>            themeColor: #00ff00;   </span></li> <li class="alt"><span>            fontFamily: Arial;   </span></li> <li><span>            fontSize: 12;   </span></li> <li class="alt"><span>            fontWeight: normal;   </span></li> <li><span>         }   </span></li> <li class="alt"><span>         .mylinkButton {   </span></li> <li><span>            rollOverColor: #00ff00;   </span></li> <li class="alt"><span>            selectionColor: #00ff00;   </span></li> <li><span>            color: #ffff00;   </span></li> <li class="alt"><span>         }   </span></li> <li><span>    </span><span class="tag"></</span><span class="tag-name">mx:Style</span><span class="tag">></span><span>  </span></li> <li class="alt"><span>       </span></li> <li><span>    </span><span class="tag"><</span><span class="tag-name">mx:Button</span><span> </span><span class="attribute">x</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">y</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">label</span><span>=</span><span class="attribute-value">“Button”</span><span class="tag">/></span><span>  </span></li> <li class="alt"><span>    </span><span class="tag"><</span><span class="tag-name">mx:LinkButton</span><span> </span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">“mylinkButton”</span><span> </span><span class="attribute">label</span><span>=</span><span class="attribute-value">“LinkButton”</span><span> </span><span class="attribute">x</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">y</span><span>=</span><span class="attribute-value">“40″</span><span class="tag">/></span><span>  </span></li> <li><span>       </span></li> <li class="alt"><span><span class="tag"></</span><span class="tag-name">mx:Application</span><span class="tag">></span><span>  </span> </span></li> </ol> </div> <p><font size="+0"><strong><font color="#0000ff">二.使用css文件<br/></font></strong>使用css文件和使用<mx:Style>标签基本一样。先创建一个css文件mystyle.css,并将上面的样式内容复制进去。</font></p> <div class="code_title">css 代码</div> <div class="dp-highlighter"> <div class="bar"> <ol class="dp-css"> <li class="alt"><span><span class="comment"><font color="#008200">/* CSS file */</font></span><span>  </span></span></li> <li><span>Button {   </span></li> <li class="alt"><span>   </span><span class="keyword"><strong><font color="#7f0055">color</font></strong></span><span>: </span><span class="colors">#ff0000</span><span>;   </span></li> <li><span>    borderColor: </span><span class="colors">#cccccc</span><span>;   </span></li> <li class="alt"><span>    themeColor: </span><span class="colors">#00ff00</span><span>;   </span></li> <li><span>    fontFamily: </span><span class="string"><font color="#0000ff">Arial</font></span><span>;   </span></li> <li class="alt"><span>    fontSize: 12;   </span></li> <li><span>    fontWeight: </span><span class="string"><font color="#0000ff">normal</font></span><span>;   </span></li> <li class="alt"><span>}   </span></li> <li><span>.mylinkButton {   </span></li> <li class="alt"><span>    rollOverColor: </span><span class="colors">#00ff00</span><span>;   </span></li> <li><span>    selectionColor: </span><span class="colors">#00ff00</span><span>;   </span></li> <li class="alt"><span>   </span><span class="keyword"><strong><font color="#7f0055">color</font></strong></span><span>: </span><span class="colors">#ffff00</span><span>;   </span></li> <li><span>    textRollOverColor: </span><span class="colors">#0000ff</span><span>;   </span></li> <li class="alt"><span>}  </span></li> </ol> </div> <p><font size="+0">再修改我们的主程序,使用<mx:Style>标签的source属性,指定css文件</font></p> <div class="code_title">xml 代码</div> <div class="dp-highlighter"> <div class="bar"> <ol class="dp-xml"> <li class="alt"><span><span class="tag"><?</span><span class="tag-name">xml</span><span> </span><span class="attribute">version</span><span>=</span><span class="attribute-value">“1.0″</span><span> </span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">“utf-8″</span><span class="tag">?></span><span>  </span></span></li> <li><span><span class="tag"><</span><span class="tag-name">mx:Application</span><span> </span><span class="attribute">xmlns:mx</span><span>=</span><span class="attribute-value">“http://www.adobe.com/2006/mxml”</span><span> </span><span class="attribute">layout</span><span>=</span><span class="attribute-value">“absolute”</span><span class="tag">></span><span>  </span> </span></li> <li class="alt"><span>       </span></li> <li><span>    </span><span class="tag"><</span><span class="tag-name">mx:Style</span><span> </span><span class="attribute">source</span><span>=</span><span class="attribute-value">“css/mystyle.css”</span><span class="tag">/></span><span>  </span></li> <li class="alt"><span>       </span></li> <li><span>    </span><span class="tag"><</span><span class="tag-name">mx:Button</span><span> </span><span class="attribute">x</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">y</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">label</span><span>=</span><span class="attribute-value">“Button”</span><span class="tag">/></span><span>  </span></li> <li class="alt"><span>    </span><span class="tag"><</span><span class="tag-name">mx:LinkButton</span><span> </span><span class="attribute">styleName</span><span>=</span><span class="attribute-value">“mylinkButton”</span><span> </span><span class="attribute">label</span><span>=</span><span class="attribute-value">“LinkButton”</span><span> </span><span class="attribute">x</span><span>=</span><span class="attribute-value">“10″</span><span> </span><span class="attribute">y</span><span>=</span><span class="attribute-value">“40″</span><span class="tag">/></span><span>  </span></li> <li><span>       </span></li> <li class="alt"><span><span class="tag"></</span><span class="tag-name">mx:Application</span><span class="tag">></span><span>  </span> </span></li> </ol> </div> <p><font size="+0"><strong><font color="#0000ff">三.使用编程方法</font></strong><br/><br /> 可以通过CSSStyleDeclaration对象,来设置css样式,也可以通过flex显示对象的setStyle()来设置样式。</font></p> <p><font size="+0">private function init():void {<br/><br /> myLinkBtn.setStyle(“color”, “#ff0000″);<br/><br /> myLinkBtn.setStyle(“rollOverColor”, “#ffff00″);<br/><br /> }</font></p> </div> </div> </div> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1458" class="post-1458 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">May</span> <span class="post-day">13</span></div> <h2><a href="http://blog.517car.com/2009/05/13/actionscript-3-0-%e7%bc%96%e7%a8%8b-%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e6%a6%82%e8%bf%b0/" rel="bookmark" title="Permanent Link to ActionScript 3.0 编程 权限控制概述">ActionScript 3.0 编程 权限控制概述</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/05/13/actionscript-3-0-%e7%bc%96%e7%a8%8b-%e6%9d%83%e9%99%90%e6%8e%a7%e5%88%b6%e6%a6%82%e8%bf%b0/#respond" title="Comment on ActionScript 3.0 编程 权限控制概述">No Comments</a></span> </div> <div class="entry"> <h1><font size="3">权限控制概述</font></h1> <p>Flash Player 客户端运行时安全模型是围绕 SWF 文件、本地数据和 Internet URL 等这些对象资源设计而成的模型。”资源持有者”是指拥有或使用这些资源的各方。资源持有者可以对其自己的资源进行控制(安全设置),每种资源有四个持有者。Flash Player 对这些控制严格采用一种权利层次结构,如下图所示:</p> <p><img alt="说明 Flash Player 安全设置的权利层次结构的图:管理员设置具有最高优先级,其次是用户设置,网站设置,最后是作者设置." border="0" src="http://www.51hkj.com/as/help/pas3/images/hierarchy_securityControl.png"/></p> <p><em>安全控制层次结构</em></p> <p><br/> <p>该图说明,如果管理员限制对资源的访问,则任何其他持有者都不能覆盖该限制。</p> <p>以下各节详细说明了管理员、用户和网站控制。本章的其余部分对作者(开发人员)设置进行了说明。</p> <h3><a name="518432"/>子主题</h3> <p><a href="http://www.51hkj.com/as/help/pas3/00000349.html#518464">管理用户控制</a></p> <p><a href="http://www.51hkj.com/as/help/pas3/00000349.html#518542">用户控制</a></p> <p><a href="http://www.51hkj.com/as/help/pas3/00000349.html#518599">Web 站点控制(跨域策略文件)</a></p> <p><a href="http://www.51hkj.com/as/help/pas3/00000349.html#518699">作者(开发人员)控制</a></p> <h2><a name="518464"/>管理用户控制</h2> <p>计算机的管理用户(使用管理权限登录的用户)可以应用能影响计算机所有用户的 Flash Player 安全设置。在非企业环境(例如家庭计算机)中,通常只有一个用户,该用户也拥有管理访问权限。即使是在企业环境中,单个用户也可以拥有计算机管理权限。</p> <p>管理用户控制有两种类型:</p> <ul> <li>mms.cfg 文件</li> <li>“全局 Flash Player 信任”目录</li> </ul> <h3><a name="518474"/>mms.cfg 文件</h3> <p>在 Mac OS X 系统上,mms.cfg 文件位于 /Library/Application Support/Macromedia 中。在 Microsoft Windows 系统上,该文件位于系统目录的 Macromedia Flash Player 文件夹中(例如,在 Windows XP 默认安装中为 C:\windows\system32\macromed\flash\mms.cfg)。</p> <p>Flash Player 启动时将从此文件中读取其安全设置,然后使用这些设置限制功能。</p> <p>mms.cfg 文件包括管理员用于执行以下任务的设置:</p> <ul> <li><strong>数据加载</strong> ― 限制读取本地 SWF 文件、禁止文件下载和上载以及对永久共享对象设置存储限制。</li> <li><strong>隐私控制</strong> ― 禁止麦克风和摄像头访问、禁止 SWF 文件播放无窗口内容,以及禁止与浏览器窗口中显示的 URL 不匹配的域中的 SWF 文件访问永久共享对象。</li> <li><strong>Flash Player 更新</strong> ― 设置检查 Flash Player 更新版本的时间间隔、指定检查 Flash Player 更新信息所使用的 URL、指定从其中下载 Flash Player 更新版本的 URL 以及完全禁用 Flash Player 的自动更新。</li> <li><strong>旧版文件支持</strong> ― 指定是否应将早期版本的 SWF 文件放置在受信任的本地沙箱中。</li> <li><strong>本地文件安全性</strong> ― 指定是否可以将本地文件放置在受信任的本地沙箱中。</li> <li><strong>全屏模式</strong> ― 禁用全屏模式。</li> </ul> <p>SWF 文件可通过调用 <code><font face="NSimsun">Capabilities.avHardwareDisable</font></code> 和 <code><font face="NSimsun">Capabilities.localFileReadDisable</font></code> 属性来访问已禁用功能的某些信息。但是,mms.cfg 文件中的大部分设置无法通过 ActionScript 进行查询。</p> <p>为对计算机强制执行与应用程序无关的安全和隐私策略,只能由系统管理员修改 mms.cfg 文件。mms.cfg 文件不能用于安装应用程序。虽然使用管理权限运行的安装程序可以修改 mms.cfg 文件的内容,但是 Adobe 将此类使用视为违反用户的信任,并且劝告安装程序的创建者决不要修改 mms.cfg 文件。</p> <h3><a name="518508"/>“全局 Flash Player 信任”目录</h3> <p>管理用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。文件在”全局 Flash Player 信任”目录中被指定为受信任,该目录与 mms.cfg 文件的所在目录相同,位置(特定于当前用户)如下:</p> <ul> <li>Windows:system\Macromed\Flash\FlashPlayerTrust</p> <p>(例如,C:\windows\system32\Macromed\Flash\FlashPlayerTrust)</p> </li> <li>Mac:app support/Macromedia/FlashPlayerTrust <p>(例如,/Library/Application Support/Macromedia/FlashPlayerTrust)</p> </li> </ul> <p>“Flash Player 信任”目录可以包含任意数目的文本文件,每个文件均列出受信任的路径,一个路径占一行。每个路径可以是单个的 SWF 文件、HTML 文件,也可以是目录。注释行以 <code><font face="NSimsun">#</font></code> 号开头。例如,包含以下文本的 Flash Player 信任配置文件表示将向指定目录及所有子目录中的所有文件授予受信任状态:</p> <div class="listing"> # Trust files in the following directories:<br /> C:\Documents and Settings\All Users\Documents\SampleApp </div> <p>信任配置文件中列出的路径应始终是本地路径或 SMB 网络路径。信任配置文件中的任何 HTTP 路径均会被忽略;只能信任本地文件。</p> <p>为避免发生冲突,应为每个信任配置文件指定一个与安装应用程序相应的文件名,并且使用 .cfg 文件扩展名。</p> <p>由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向”全局 Flash Player 信任”目录添加一个配置文件,为要分发的文件授予完全访问权限。安装应用程序必须由拥有管理权限的用户来运行。与 mms.cfg 文件不同,包含”全局 Flash Player 信任”目录是为了让安装应用程序授予信任权限。管理用户和安装应用程序都可以使用”全局 Flash Player 信任”目录指定受信任的本地应用程序。</p> <p>此外,还有适用于单个用户的”Flash Player 信任”目录(请参阅下一节<a href="http://www.51hkj.com/as/help/pas3/00000349.html#518542">用户控制</a>)。</p> <h2><a name="518542"/>用户控制</h2> <p>Flash Player 提供三种不同的用户级别权限设置机制:”设置 UI”、”设置管理器”和”用户 Flash Player 信任”目录。</p> <h3><a name="518546"/>设置 UI 和设置管理器</h3> <p>“设置 UI”是一种用于配置特定域设置的快速交互机制。”设置管理器”显示一个更详细的界面,并提供全局更改功能,全局更改可影响对许多域或所有域拥有的权限。另外,当 SWF 文件请求新的权限,要求有关安全或隐私的运行时决策时,程序会显示一些对话框,用户可以在这些对话框中调整某些 Flash Player 设置。</p> <p>“设置管理器”和”设置 UI”提供以下安全相关选项:</p> <ul> <li>摄像头和麦克风设置 ― 用户可以控制 Flash Player 对计算机上的摄像头和麦克风的访问。用户可以允许或拒绝对所有站点或特定站点的访问。如果用户没有为所有站点或特定站点指定设置,则当 SWF 文件试图访问摄像头或麦克风时,程序会显示一个对话框,让用户选择是否允许 SWF 文件访问该设备。用户也可以指定要使用的摄像头或麦克风,还可以设置麦克风的敏感度。</li> <li>共享对象存储设置 ― 用户可以选择域能够用来存储永久共享对象的磁盘空间量。用户可以对任意数量的特定域进行这些设置,还可以为新域指定默认设置。默认限制是 100 KB 磁盘空间。有关永久共享对象的详细信息,请参阅<em>《</em><em>ActionScript 3.0 语言和组件参考》</em>中的 SharedObject 类。</li> </ul> <table class="notesidebar FCK__ShowTableBorders" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td width="5"> <p><strong>注意</strong></p> </td> <td width="1"> </td> <td> <p>在 mms.cfg 文件中所做的任何设置(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000349.html#518464">管理用户控制</a>)均不会反映在”设置管理器”中。</p> </td> </tr> </tbody> </table> <p>有关”设置管理器”的详细信息,请参阅<a target="mm_window" href="http://www.adobe.com/go/settingsmanager_cn"> www.adobe.com/go/settingsmanager_cn</a>。</p> <h3><a name="518571"/>“用户 Flash Player 信任”目录</h3> <p>用户和安装应用程序可以将指定的本地 SWF 文件注册为受信任。这些 SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它 SWF 文件进行交互,也可以从任意位置(远程或本地)加载数据。用户在”用户 Flash Player 信任”目录中将文件指定为受信任,该目录与 Flash 共享对象存储区域的所在目录相同,位置(特定于当前用户)如下:</p> <ul> <li>Windows:app data\Macromedia\Flash Player\#Security\FlashPlayerTrust</p> <p>(例如,C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)</p> </li> <li>Mac:app data/Macromedia/Flash Player/#Security/FlashPlayerTrust <p>(例如,/Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)</p> </li> </ul> <p>这些设置只会影响当前用户,不会影响登录到计算机的其他用户。如果没有管理权限的用户在属于他们自己的系统中安装了某个应用程序,则”用户 Flash Player 信任”目录允许安装程序将该应用程序注册为该用户的受信任程序。</p> <p>由于开发人员通过安装应用程序分发本地运行的 SWF 文件,因此可以让安装应用程序向”用户 Flash Player 信任”目录添加一个配置文件,为要分发的文件授予完全访问权限。即使在这种情况下,也将”用户 Flash Player 信任”目录文件视为用户控制,原因是用户操作(安装)启动了它。</p> <p>此外,还有一个”全局 Flash Player 信任”目录,管理用户或安装程序可使用该目录为所有计算机用户注册应用程序(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000349.html#518464">管理用户控制</a>)。</p> <h2><a name="518599"/>Web 站点控制(跨域策略文件)</h2> <p>要使来自某个 Web 服务器的数据可用于来自其它域的 SWF 文件,可以在服务器上创建一个跨域策略文件。”跨域策略文件”是一个 XML 文件,它为服务器提供了一种方式,以指示该服务器的数据和文档可用于从某些域或所有域提供的 SWF 文件。服务器策略文件指定的域所提供的所有 SWF 文件都将被允许访问该服务器中的数据或资源。</p> <p>跨域策略文件可影响对许多资源的访问,其中包括以下内容:</p> <ul> <li>位图、声音和视频中的数据</li> <li>加载 XML 和文本文件</li> <li>对套接字和 XML 套接字连接的访问</li> <li>将 SWF 文件从其它安全域导入到执行加载的 SWF 文件所在的安全域</li> </ul> <p>本章的其余部分将对以上内容提供详细介绍。</p> <h3><a name="518615"/>策略文件语法</h3> <p>下面的示例显示了一个策略文件,该文件允许访问源自 <code><font face="NSimsun">*.example.com</font></code>、<code><font face="NSimsun">www.friendOfExample.com</font></code> 和 <code><font face="NSimsun">192.0.34.166</font></code> 的 SWF 文件。</p> <div class="listing"> <?xml version=”1.0″?><br /> <cross-domain-policy><br /> <allow-access-from domain=”*.<code>example</code>.com” /><br /> <allow-access-from domain=”www.<code>friendOfExample</code>.com” /><br /> <allow-access-from domain=”192.0.34.166″ /><br /> </cross-domain-policy> </div> <p>当某个 SWF 文件试图访问另一个域中的数据时,Flash Player 会尝试自动从该域加载策略文件。如果试图访问数据的 SWF 文件所在的域包括在该策略文件中,则数据将自动成为可访问数据。</p> <p>默认情况下,策略文件必须命名为 <code><font face="NSimsun">crossdomain.xml</font></code>,并且必须位于服务器的根目录中。但是,SWF 文件可以通过调用 <code><font face="NSimsun">Security.loadPolicyFile()</font></code> 方法检查是否为其它名称或位于其它目录中。跨域策略文件仅适用于从其中加载该文件的目录及其子目录。因此,根目录中的策略文件适用于整个服务器,但是从任意子目录加载的策略文件仅适用于该目录及其子目录。</p> <p>策略文件仅影响对其所在特定服务器的访问。例如,位于 https://www.adobe.com:8080/crossdomain.xml 的策略文件只适用于在端口 8080 通过 HTTPS 对 www.adobe.com 进行的数据加载调用。</p> <p>跨域策略文件包含单个 <code><font face="NSimsun"><cross-domain-policy></font></code> 标签,该标签又包含零个或多个 <code><font face="NSimsun"><allow-access-from></font></code> 标签。每个 <code><font face="NSimsun"><allow-access-from></font></code> 标签包含一个属性 <code><font face="NSimsun">domain</font></code>,该属性指定一个确切的 IP 地址、一个确切的域或一个通配符域(任何域)。通配符域由单个星号 (*)(匹配所有域和所有 IP 地址)或后接后缀的星号(只匹配那些以指定后缀结尾的域)表示。后缀必须以点开头。但是,带有后缀的通配符域可以匹配那些只包含后缀但不包含前导点的域。例如,foo.com 会被看作是 *.foo.com 的一部分。IP 域规范中不允许使用通配符。</p> <p>如果您指定了一个 IP 地址,则只向使用 IP 语法从该 IP 地址加载的 SWF 文件(例如 http://65.57.83.12/flashmovie.swf)授予访问权限,而不向使用域名语法加载的 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。</p> <p>您可以允许访问来自任何域的文档,如下面的示例所示:</p> <div class="listing"> <?xml version=”1.0″?><br /> <!– http://www.foo.com/crossdomain.xml –><br /> <cross-domain-policy><br /> <allow-access-from domain=”*” /><br /> </cross-domain-policy> </div> <p>每个 <code><font face="NSimsun"><allow-access-from></font></code> 标签还具有可选的 <code><font face="NSimsun">secure</font></code> 属性,其默认值为 <code><font face="NSimsun">true</font></code>。如果您的策略文件在 HTTPS 服务器上,并且要允许非 HTTPS 服务器上的 SWF 文件从 HTTPS 服务器加载数据,则可以将此属性设置为 <code><font face="NSimsun">false</font></code>。</p> <p>将 <code><font face="NSimsun">secure</font></code> 属性设置为 <code><font face="NSimsun">false</font></code> 可能会危及 HTTPS 提供的安全性。特别是将此属性设置为 <code><font face="NSimsun">false</font></code> 时,会使安全内容受到电子欺骗和窃听攻击。Adobe 强烈建议不要将 <code><font face="NSimsun">secure</font></code> 属性设置为 <code><font face="NSimsun">false</font></code>。</p> <p>如果要加载的数据位于 HTTPS 服务器上,但是加载数据的 SWF 文件位于 HTTP 服务器上,则 Adobe 建议将要执行加载的 SWF 文件移动到 HTTPS 服务器上,以便可以使安全数据的所有副本都能得到 HTTPS 的保护。但是,如果决定必须将要执行加载的 SWF 文件保存在 HTTP 服务器上,则需将 <code><font face="NSimsun">secure="false"</font></code> 属性添加到 <code><font face="NSimsun"><allow-access-from></font></code> 标签,如以下代码所示:</p> <div class="listing"> <code><allow-access-from domain="www.example.com" secure="false" /></code> </div> <p>不包含任何 <code><font face="NSimsun"><allow-access-from></font></code> 标签的策略文件相当于服务器上没有策略。</p> <h3><a name="518649"/>套接字策略文件</h3> <p>ActionScript 对象可实例化两种不同的服务器连接:基于文档的服务器连接和套接字连接。Loader、Sound、URLLoader 和 URLStream 等 ActionScript 对象可实例化基于文档的服务器连接,这些对象均根据 URL 加载文件。ActionScript Socket 和 XMLSocket 对象进行套接字连接,这些对象操作的是数据流而非加载的文档。Flash Player 支持两种策略文件:基于文档的策略文件和套接字策略文件。基于文档的连接需要基于文档的策略文件,套接字连接则需要套接字策略文件。</p> <p>Flash Player 要求使用尝试连接希望使用的同类协议传输策略文件。例如,如果将策略文件放置在您的 HTTP 服务器上,则允许其它域中的 SWF 文件从该服务器(作为 HTTP 服务器)加载数据。但是,如果在这台服务器上未提供套接字策略文件,则禁止其它域的 SWF 文件在套接字级别连接到该服务器。检索套接字策略文件的方法必须与连接方法相匹配。</p> <p>由套接字服务器提供的策略文件具有与任何其它策略文件相同的语法,只是前者还必须指定要对哪些端口授予访问权限。如果策略文件来自低于 1024 的端口号,则它可以对任何端口授予访问权限;如果策略文件来自 1024 或更高的端口,则它只能对 1024 端口和更高的端口授予访问权限。允许的端口在 <code><font face="NSimsun"><allow-access-from></font></code> 标签的 <code><font face="NSimsun">to-ports</font></code> 属性中指定。单个端口号、端口范围和通配符都是允许值。</p> <p>下面是一个 XMLSocket 策略文件示例:</p> <div class="listing"> <cross-domain-policy><br /> <allow-access-from domain=”*” to-ports=”507″ /><br /> <allow-access-from domain=”*.example.com” to-ports=”507,516″ /><br /> <allow-access-from domain=”*.example2.com” to-ports=”516-523″ /><br /> <allow-access-from domain=”www.example2.com” to-ports=”507,516-523″ /><br /> <allow-access-from domain=”www.example3.com” to-ports=”*” /><br /> </cross-domain-policy> </div> <p>在 Flash Player 6 中首次引入策略文件时,并不支持套接字策略文件。与套接字服务器的连接由跨域策略文件所在默认位置中的一个策略文件授权,跨域策略文件位于与套接字服务器位于同一个域中的 HTTP 服务器的端口 80 上。为尽可能保留现有的服务器排列,Flash Player 9 仍然支持此功能。但是,Flash Player 现在的默认设置是在与套接字连接相同的端口上检索套接字策略文件。如果希望使用基于 HTTP 的策略文件来授权套接字连接,则必须使用如下所示代码显式请求 HTTP 策略文件:</p> <div class="listing"> <code>Security.loadPolicyFile("http://socketServerHost.com/crossdomain.xml")</code> </div> <p>此外,为授权套接字连接,HTTP 策略文件只能来自跨域策略文件的默认位置,而非来自任何其它 HTTP 位置。从 HTTP 服务器获取的策略文件隐式向 1024 和所有更高端口授予套接字访问权限;HTTP 策略文件中的任何 <code><font face="NSimsun">to-ports</font></code> 属性均被忽略。</p> <p>有关套接字策略文件的详细信息,请参阅<a href="http://www.51hkj.com/as/help/pas3/00000356.html#519500">连接到套接字</a>。</p> <h3><a name="518673"/>预加载策略文件</h3> <p>从服务器加载数据或连接到套接字是一种异步操作,Flash Player 只是等待跨域策略文件完成下载,然后才开始主操作。但是,从图像中提取像素数据或从声音中提取采样数据是一种同步操作,跨域策略文件必须在可以提取数据之前先加载数据。加载媒体时,需要指定媒体检查是否存在跨域策略文件:</p> <ul> <li>使用 <code><font face="NSimsun">Loader.load()</font></code> 方法时,设置 <code><font face="NSimsun">context</font></code> 参数的 <code><font face="NSimsun">checkPolicyFile</font></code> 属性,该参数是一个 LoaderContext 对象。</li> <li>使用 <code><font face="NSimsun"><img></font></code> 标签在文本字段中嵌入图像时,将 <code><font face="NSimsun"><img></font></code> 标签的 <code><font face="NSimsun">checkPolicyFile</font></code> 属性设置为 <code><font face="NSimsun">"true"</font></code>,如下所示:<code><font face="NSimsun"><img checkPolicyFile = "true" src = "example.jpg"></font></code>。</li> <li>使用 <code><font face="NSimsun">Sound.load()</font></code> 方法时,设置 <code><font face="NSimsun">context</font></code> 参数的 <code><font face="NSimsun">checkPolicyFile</font></code> 属性,该参数是一个 SoundLoaderContext 对象。</li> <li>使用 NetStream 类时,设置 NetStream 对象的 <code><font face="NSimsun">checkPolicyFile</font></code> 属性。</li> </ul> <p>设置上述参数时,Flash Player 首先会检查是否已经为该域下载了任何策略文件。然后考虑对 <code><font face="NSimsun">Security.loadPolicyFile()</font></code> 方法的任何待定调用,以便查看它们是否在范围内,如果在范围内,则等待调用完成。然后,它查找服务器上默认位置中的跨域策略文件。</p> <h2><a name="518699"/>作者(开发人员)控制</h2> <p>用于授予安全权限的主 ActionScript API 是 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法,它将向指定域中的 SWF 文件授予权限。在下面的示例中,SWF 文件向 www.example.com 域提供的 SWF 文件授予访问权限:</p> <div class="listing"> <code>Security.allowDomain("www.example.com")</code> </div> <p>此方法为下列各项授予权限:</p> <ul> <li>SWF 文件之间的跨脚本访问(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000354.html#519205">跨脚本访问</a>)</li> <li>显示列表访问(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000354.html#519286">遍历显示列表</a>)</li> <li>事件检测(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000354.html#519308">事件安全性</a>)</li> <li>对 Stage 对象的属性和方法的完全访问(请参阅<a href="http://www.51hkj.com/as/help/pas3/00000354.html#519263">Stage 安全性</a>)</li> </ul> <p>调用 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法的主要目的是为外部域中的 SWF 文件授予权限以访问调用 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法的 SWF 文件的脚本。有关详细信息,请参阅<a href="http://www.51hkj.com/as/help/pas3/00000354.html#519205">跨脚本访问</a>。</p> <p>如果将 IP 地址指定为 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法的参数,则不允许任何源自该指定 IP 地址的访问方进行访问。相反,只允许 URL 中包含该指定 IP 地址的访问方进行访问,而不允许其域名映射到该 IP 地址的访问方进行访问。例如,如果域名 www.example.com 映射到 IP 地址 192.0.34.166,则对 <code><font face="NSimsun">Security.allowDomain("192.0.34.166")</font></code> 的调用不会授予对 www.example.com 的访问权限。</p> <p>可以将通配符<code><font face="NSimsun">"*"</font></code>传递给 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法以允许从所有域进行访问。由于这种方式会为”所有”域中的 SWF 文件授予访问执行调用的 SWF 文件的脚本的权限,因此请谨慎使用通配符<code><font face="NSimsun">"*"</font></code>。</p> <p>ActionScript 还包括一个权限 API,称为 <code><font face="NSimsun">Security.allowInsecureDomain()</font></code>。此方法与 <code><font face="NSimsun">Security.allowDomain()</font></code> 方法的作用相同,只是从安全 HTTPS 连接提供的 SWF 文件调用时,此方法还会允许非安全协议(例如 HTTP)提供的其它 SWF 文件访问执行调用的 SWF 文件。但是,在安全协议 (HTTPS) 中的文件与非安全协议(例如 HTTP)中的文件之间执行脚本访问操作并不是一种好的安全性做法;这样做会使安全内容受到电子欺骗和窃听攻击。下面是此类攻击的作用方式:由于 <code><font face="NSimsun">Security.allowInsecureDomain()</font></code> 方法允许通过 HTTP 连接提供的 SWF 文件访问安全 HTTPS 数据,因此介入 HTTP 服务器和用户之间的攻击者能够将 HTTP SWF 文件替换为它们自己的文件,这样便可访问您的 HTTPS 数据。</p> <p>另一种与安全性相关的重要方法是 <code><font face="NSimsun">Security.loadPolicyFile()</font></code> 方法,该方法可让 Flash Player 在非标准位置检查是否存在跨域策略文件。有关详细信息,请参阅<a href="http://www.51hkj.com/as/help/pas3/00000349.html#518599">Web 站点控制(跨域策略文件)</a>。</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1459" class="post-1459 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">May</span> <span class="post-day">12</span></div> <h2><a href="http://blog.517car.com/2009/05/12/flash%e7%9a%84%e5%ae%89%e5%85%a8%e6%b2%99%e7%ae%b1/" rel="bookmark" title="Permanent Link to Flash的安全沙箱">Flash的安全沙箱</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/05/12/flash%e7%9a%84%e5%ae%89%e5%85%a8%e6%b2%99%e7%ae%b1/#respond" title="Comment on Flash的安全沙箱">No Comments</a></span> </div> <div class="entry"> <table class="tab-content table-break FCK__ShowTableBorders" cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="summary remark word-break"> <div class="summary remark word-break">Flash的安全沙箱</div> </td> </tr> <tr> <td class="remark word-break"> <div class="remark word-break">几个月前从学校图书馆借了本Flex与AS3编程的书,我看书的速度还是挺快的,因为我只看能够吸引我的知识,Flex中我一般不会去看的是设计这块,最多了解了解,虽然我对设计还是比较感兴趣。这书,我是在地铁上,酒吧内翻翻看看的,这里得做下笔记,以免一年后我都不知道自己“相对”系统地了解过这个。恩,既然我这次笔记有涉及到Flex,那么先说说Flex的最重要两个文件:MXML文件与AS文件。 <br/><br/><br /> MXML与AS的hello world,如何编译这就不说了(还有Flex与Flash什么区别等等这些基本点都不用提了): <br/><br/><br /> <?xml version=”1.0″ encoding=”utf-8″?> <br/><br /> <mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml”> <br/><br />      <mx:Script> <br/><br />          <![CDATA[ <br/><br />              import mx.controls.Alert; <br/><br />              Alert.show("hello world"); <br/><br />          ]]> <br/><br />      </mx:Script> <br/><br /> </mx:Application> <br/><br/><br /> MXML文件其实就是个XML文件,其内可以使用<mx:Script></mx:Script>这样的标签来内嵌AS脚本(就像HTML文件中<script></script>标签内写JS一样)。除了可以使用import来动态导入Flex与Flash的模块(可以理解为就是个as文件)外,还可以使用下面两种方式导入as文件: <br/><br/><br /> <mx:Script source=”hello.as”/> <br/><br/><br /> 与 <br/><br/><br /> <mx:Script> <br/><br />      <![CDATA[ <br/><br />          include "hello.as"; <br/><br />      ]]> <br/><br /> </mx:Script> <br/><br/><br /> 说这些的目的是因为在浏览器的客户端应用上,除了JS还有什么脚本是值得关注的?那就是AS了,同样很重要的逻辑控制部分!而界面展示上,此时MXML与HTML就类似了(看上面,看上面,自己类比下):)。RIA不是已经炒作很火热了吗?Flex就是致力于RIA的应用,Adobe为了扩大战场,推出了AIR环境,那么此时采用Flex编写的程序在浏览器中与桌面环境下都可以很好的移植了。像Flex与Flash这样奇怪的东西,战场不仅仅在浏览器上,还跑到了桌面环境下。一个很重要的安全模型就被提出了:Flash的安全沙箱。要是没这样的安全策略,恐怕这个世界就不安宁了,当然初期,这个世界本身就不安宁(我接触Flash时,那时还是5.0、6.0版本的,那是04年,我刚上大学的时候……)。这样的策略是这些年逐渐完善的。 <br/><br/><br /> 其实说Flash的安全沙箱就包含进Flex了,因为本质都是Flash,都是运行在Flash Player这个容器中的,Flex仅仅是将程序员与设计人员分离了而已。 <br/><br/><br /> 进入本次的主题- -。。 <br/><br/><br /> 因为是笔记,所以不会详细,而且这些笔记来自我看的书籍与资料(这似乎是废话)。 <br/><br/><br /> 安全沙箱包括:远程沙箱与本地沙箱。其实这个沙箱模型类似与浏览器中的同源策略。在同一域内的资源会被放到一个安全组下,这个安全组就被称为安全沙箱了。 <br/><br/><br /> 在深入了解沙箱之前先得明确Flash Player的权限控制(我还是按照Flash CS3上的中文官方文档的名词来划分吧): <br/><br/><br /> 1、管理用户控制: <br/><br/><br /> 这指系统的最高权限用户,win下的Administrator,linux下的root等。有两种类型的控制: <br/><br/><br /> a)、mms.cfg文件:数据加载、隐私控制、Flash Player更新、旧版文件支持、本地文件安全性、全屏模式等。 <br/><br /> b)、”全局 Flash Player 信任”目录:当某些SWF文件被指定到这个受信任的目录下时,这些SWF 文件会被分配到受信任的本地沙箱。它们可以与任何其它SWF文件进行交互,也可以从任意位置(远程或本地)加载数据。该信任目录的默认路径为:C:\windows\system32\Macromed\Flash\FlashPlayerTrust。 <br/><br/><br /> 2、用户控制: <br/><br/><br /> 相对于第1种,这里的用户是指普通用户。有这三种类型的控制: <br/><br/><br /> a)、摄像头与麦克风设置:还记得ClickJacking的那个Flash DEMO么? <br/><br /> b)、共享对象存储设置:就是那个SharedObject了。 <br/><br /> c)、相对与”全局 Flash Player 信任”目录,用户权限这也有个”用户 Flash Player 信任”目录。默认路径:C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust。 <br/><br/><br /> 3、Web 站点控制(跨域策略文件): <br/><br/><br /> 就是家喻户晓的crossdomain.xml文件了,现在的安全策略是该文件只能存放在站点根目录下了,文件格式如: <br/><br/><br /> <?xml version=”1.0″?> <br/><br /> <cross-domain-policy> <br/><br /> <allow-access-from domain=”*” /> <br/><br /> </cross-domain-policy> <br/><br/><br /> 随便看个例子<img class="icon" src="http://www.hacker.com.cn/images/filetype/url.gif"/><a href="http://fanfou.com/crossdomain.xml" target="_blank">http://fanfou.com/crossdomain.xml</a>。通过该文件的配置可以提供允许的域跨域访问本域上内容的权限。 <br/><br/><br /> 4、作者(开发人员)控制: <br/><br/><br /> 开发者可以通过编码(在AS脚本中)指定允许的安全控制权限,如: <br/><br/><br /> Security.allowDomain(“www.xeye.us”); <br/><br/><br /> 当然都支持通配符*了。这个通配符真是个瘟神,程序员可得谨慎使用,以免添加不必要的安全风险。 <br/><br/><br /> 好,Flash Player的权限控制明了之后,现在可以来看看安全沙箱了。 <br/><br/><br /> 1、远程沙箱: <br/><br/><br /> 这个远程沙箱控制着远程域上,浏览器环境中的安全策略,比<img class="icon" src="http://www.hacker.com.cn/images/filetype/url.gif"/><a href="http://xeye.us/" target="_blank">http://xeye.us/</a>域中的Flash文件就无法单刀直入地<img class="icon" src="http://www.hacker.com.cn/images/filetype/url.gif"/><a href="http://hi.baidu.com/ycosxhack" target="_blank">http://hi.baidu.com/ycosxhack</a>域上的Flash文件交互。同一个域(严格域)下的所有文件属于一个沙箱,沙箱内的对象是可以互相返回,而沙箱之间的对象需要交互的话,得靠上面介绍的权限控制的“Web 站点控制(跨域策略文件)”与“作者(开发人员)控制”进行了。 <br/><br/><br /> 2、本地沙箱: <br/><br/><br /> 出来个本地沙箱,没办法,Flash与Flex文件可以在我们的桌面环境下运行。如果没有个很好的安全策略来限制这些功能不弱的AS脚本的话,那绝对是很危险的事。 <br/><br/><br /> 它有三种类型: <br/><br/><br /> a)、只能与本地文件系统内容交互的本地沙箱:顾名思义,就是该Flash文件在本地运行时是不能与网络上的对象进行通信的,而只能与本地对象进行交互。 <br/><br /> b)、只能与远程内容交互的本地沙箱:还是顾名思义,此时的Flash文件要与远程域对象交互时,需在远程域上通过策略文件或以Security.allowDomain编码方式来设置访问策略(同远程沙箱)。此时不能访问本地文件。 <br/><br /> c)、受信任的本地沙箱:完美了,上面介绍的权限控制中,管理用户与普通用户都有Flash Player信任目录的控制权限,只要将我们的SWF文件放到受信任目录内运行,那么这个Flash文件就可以与本地域和远程域通信了:)。 <br/><br/><br /> 当然以上这些沙箱类型,我们可以通过编码来确定当前运行的Flash文件被分配到什么类型的沙箱中。还是通过Security类:Security.sandboxType,值: <br/><br/><br /> Security.REMOTE(远程沙箱) <br/><br /> Security.LOCAL_WITH_FILE(只能与本地文件系统内容交互的本地沙箱) <br/><br /> Security.LOCAL_WITH_NETWORK(只能与远程内容交互的本地沙箱) <br/><br /> Security.LOCAL_TRUSTED(受信任的本地沙箱) <br/><br/><br /> 恩,Flash的安全沙箱就是这些笔记了,写到这,还不得不提下Flash的一些其他安全问题。这些安全问题大多围绕安全沙箱进行。 <br/><br/><br /> 在我们发布Flash时生成的HTML文件内,<object>与<embed>标签内的几个属性需要明确的。 <br/><br/><br /> allowNetworking: <br/><br/><br /> 该参数控制Flash文件的网络访问功能。有三个值:all(所有的网络API都可用)、internal(除了不能使用浏览器导航和浏览器交互的API外,其它的都可用)、none(所以网络API都不可用)。 <br/><br/><br /> allowScriptAccess: <br/><br/><br /> 这是AS与JS通信的安全控制,还记得ExternalInterface的作用吗。有三个值:never(ExternalInterface的call方法不能与HTML的JS脚本进行通信)、sameDomain(同域内就可以了,这是默认值)、always(这个就允许所有域了,比较危险)。 <br/><br/><br /> allowFullScreen: <br/><br/><br /> 全屏模式的安全问题,这是一个boolean值,默认为false,不允许Flash全屏。全屏带来的安全问题莫非是用户界面欺骗这样的类型?我不是很清楚。 <br/><br/><br /> 上面这三个属性得区分好了啊。安全问题不仅这点,还有比如LocalConnetion的本地通信、共享对象SharedObject的使用、E4X在AS中的使用、其它的Socket通信、一些网络API,比如全局的navigateToURL、Flash与其它非Flash的外部对象的通信问题等等。这些安全问题大都围绕安全沙箱进行。Flash或者Flex文件可以做得很漂亮,很精彩,比如那些非常优秀的Flash动画与游戏,然而一定得时刻保持警惕。 <br/><br/><br /> 可以起床了,明天坐火车回家,临客- -。。。本假期有挑战性的任务,应该没问题,大家过个把月就可以看到我们的战果了!</div> </td> </tr> </tbody> </table> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="post-container"> <div id="post-1460" class="post-1460 post type-post hentry category-flex"> <div class="post-title"> <div class="post-date"><span class="post-month">May</span> <span class="post-day">12</span></div> <h2><a href="http://blog.517car.com/2009/05/12/httpservice%e8%af%bbxml%e5%8f%91%e7%94%9fsecurity-error-accessing-url/" rel="bookmark" title="Permanent Link to httpService读XML发生Security error accessing url">httpService读XML发生Security error accessing url</a></h2> <span class="post-dates">By mmxcq</span><span class="post-comments"><a href="http://blog.517car.com/2009/05/12/httpservice%e8%af%bbxml%e5%8f%91%e7%94%9fsecurity-error-accessing-url/#respond" title="Comment on httpService读XML发生Security error accessing url">No Comments</a></span> </div> <div class="entry"> <p>Flex中用httpService读取不同域的XML(如http://xml.weather.yahoo.com/forecastrss),会发生Security error accessing url错误. 不过在调试文件夹(默认bin-debug)下却可以正常读取. 这个情况很讨厌.相信不少人被这个安全问题困扰。</p> <p>为什么仅在调试文件夹下可以呢? 原来,bin-debug文件夹下能用仅仅是因为[系统盘]:\Documents and Settings\[用户名]\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust\flexbuilder.cfg里面自动设置了可信,实际运行时是安全禁止的。也就是说我们需要做的就是解决安全禁止的问题。</p> <p>那么,如何解决呢?<br/><br /> 有位兄弟(iknowkungfoo)也遇到这个问题<a href="http://www.iknowkungfoo.com/blog/index.cfm/2007/12/5/Security-error-accessing-url-problem-with-Flex-SWF">“Security error accessing url” problem with Flex SWF</a> 他查阅了官方文档,发现解决方法:</p> <p>由于安全问题,客户端应用仅在满足三个条件之一时可以访问远程数据:</p> <ol> <li>编译的SWF文件与远程数据源在同一域</li> <li>使用代理,SWF文件在代理的相同服务器上</li> <li>在远程主机放置跨域文件</li> </ol> <p>而这位兄弟懒得去捣鼓跨域文件,因此他宁愿<strong>让SWF文件的链接与数据源在同一域</strong>,满足了第一条。</p> <p>而我们往往都是希望使用别的网站提供API完成某功能才遇到这个安全状况(比如雅虎天气),因此我们无法把SWF文件放到远程数据源的同一域上以满足第一条条件。但我们可以创造第一条件来达到目的:<strong>在自己的网站上做一个动态网页去yahoo获取天气,然后用swf读取自己这个动态网页的结果</strong>(个人推荐)。</p> <p>还有个方法,使用代理,这个没搞过,我感觉有点复杂,要写个proxy-config.xml。详细参考: <a href="http://topic.csdn.net/u/20080519/22/a81d6760-bbbd-413f-a82d-cedb31364cc9.html?2018256354">Flex3.0调用webservice,没有任何反应(csdn)</a> 和 <a href="http://blog.riaproject.com/?p=23">Flex跨網域存取XML – Flex Proxy Service</a></p> <p>最后,必杀招:如果有能量(強大的交涉手腕),与Yahoo联系一下,在他们网站上放个跨域文件,万事OK。</p> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 468x60, 11-5-3 */ google_ad_slot = "9919392144"; google_ad_width = 468; google_ad_height = 60; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> </div> </div> </div> <div class="separator"></div> <div class="navigation-down"><span class="previous-entries"><a href="http://blog.517car.com/category/flex/page/2/" >< Older</a></span><span class="next-entries"></span> </div> </div> <div id="sidebar"> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; /* 200x200, 10-3-14 */ google_ad_slot = "6337996629"; google_ad_width = 200; google_ad_height = 200; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script><br/> <div class="widget-box"> <h2>Archives</h2> <ul> <li><a href='http://blog.517car.com/2012/03/' title='March 2012'>March 2012</a></li> <li><a href='http://blog.517car.com/2012/02/' title='February 2012'>February 2012</a></li> <li><a href='http://blog.517car.com/2012/01/' title='January 2012'>January 2012</a></li> <li><a href='http://blog.517car.com/2011/12/' title='December 2011'>December 2011</a></li> <li><a href='http://blog.517car.com/2011/11/' title='November 2011'>November 2011</a></li> <li><a href='http://blog.517car.com/2011/10/' title='October 2011'>October 2011</a></li> <li><a href='http://blog.517car.com/2011/09/' title='September 2011'>September 2011</a></li> <li><a href='http://blog.517car.com/2011/08/' title='August 2011'>August 2011</a></li> <li><a href='http://blog.517car.com/2011/07/' title='July 2011'>July 2011</a></li> <li><a href='http://blog.517car.com/2011/06/' title='June 2011'>June 2011</a></li> <li><a href='http://blog.517car.com/2011/05/' title='May 2011'>May 2011</a></li> <li><a href='http://blog.517car.com/2011/04/' title='April 2011'>April 2011</a></li> <li><a href='http://blog.517car.com/2011/03/' title='March 2011'>March 2011</a></li> <li><a href='http://blog.517car.com/2011/02/' title='February 2011'>February 2011</a></li> <li><a href='http://blog.517car.com/2011/01/' title='January 2011'>January 2011</a></li> <li><a href='http://blog.517car.com/2010/12/' title='December 2010'>December 2010</a></li> <li><a href='http://blog.517car.com/2010/11/' title='November 2010'>November 2010</a></li> <li><a href='http://blog.517car.com/2010/10/' title='October 2010'>October 2010</a></li> <li><a href='http://blog.517car.com/2010/09/' title='September 2010'>September 2010</a></li> <li><a href='http://blog.517car.com/2010/08/' title='August 2010'>August 2010</a></li> <li><a href='http://blog.517car.com/2010/07/' title='July 2010'>July 2010</a></li> <li><a href='http://blog.517car.com/2010/06/' title='June 2010'>June 2010</a></li> <li><a href='http://blog.517car.com/2010/05/' title='May 2010'>May 2010</a></li> <li><a href='http://blog.517car.com/2010/04/' title='April 2010'>April 2010</a></li> <li><a href='http://blog.517car.com/2010/03/' title='March 2010'>March 2010</a></li> <li><a href='http://blog.517car.com/2010/02/' title='February 2010'>February 2010</a></li> <li><a href='http://blog.517car.com/2010/01/' title='January 2010'>January 2010</a></li> <li><a href='http://blog.517car.com/2009/12/' title='December 2009'>December 2009</a></li> <li><a href='http://blog.517car.com/2009/11/' title='November 2009'>November 2009</a></li> <li><a href='http://blog.517car.com/2009/09/' title='September 2009'>September 2009</a></li> <li><a href='http://blog.517car.com/2009/08/' title='August 2009'>August 2009</a></li> <li><a href='http://blog.517car.com/2009/07/' title='July 2009'>July 2009</a></li> <li><a href='http://blog.517car.com/2009/06/' title='June 2009'>June 2009</a></li> <li><a href='http://blog.517car.com/2009/05/' title='May 2009'>May 2009</a></li> <li><a href='http://blog.517car.com/2009/04/' title='April 2009'>April 2009</a></li> <li><a href='http://blog.517car.com/2009/03/' title='March 2009'>March 2009</a></li> <li><a href='http://blog.517car.com/2009/02/' title='February 2009'>February 2009</a></li> <li><a href='http://blog.517car.com/2009/01/' title='January 2009'>January 2009</a></li> <li><a href='http://blog.517car.com/2008/12/' title='December 2008'>December 2008</a></li> <li><a href='http://blog.517car.com/2008/11/' title='November 2008'>November 2008</a></li> <li><a href='http://blog.517car.com/2008/10/' title='October 2008'>October 2008</a></li> <li><a href='http://blog.517car.com/2008/09/' title='September 2008'>September 2008</a></li> <li><a href='http://blog.517car.com/2008/08/' title='August 2008'>August 2008</a></li> <li><a href='http://blog.517car.com/2008/07/' title='July 2008'>July 2008</a></li> <li><a href='http://blog.517car.com/2008/06/' title='June 2008'>June 2008</a></li> <li><a href='http://blog.517car.com/2008/05/' title='May 2008'>May 2008</a></li> <li><a href='http://blog.517car.com/2008/04/' title='April 2008'>April 2008</a></li> <li><a href='http://blog.517car.com/2008/03/' title='March 2008'>March 2008</a></li> <li><a href='http://blog.517car.com/2008/02/' title='February 2008'>February 2008</a></li> <li><a href='http://blog.517car.com/2008/01/' title='January 2008'>January 2008</a></li> <li><a href='http://blog.517car.com/2007/12/' title='December 2007'>December 2007</a></li> <li><a href='http://blog.517car.com/2007/11/' title='November 2007'>November 2007</a></li> <li><a href='http://blog.517car.com/2007/10/' title='October 2007'>October 2007</a></li> <li><a href='http://blog.517car.com/2007/09/' title='September 2007'>September 2007</a></li> <li><a href='http://blog.517car.com/2007/07/' title='July 2007'>July 2007</a></li> <li><a href='http://blog.517car.com/1970/01/' title='January 1970'>January 1970</a></li> </ul> </div> <div class="widget-box"> <h2>Categories</h2> <ul> <li class="cat-item cat-item-14"><a href="http://blog.517car.com/category/apache/" title="View all posts filed under Apache">Apache</a> </li> <li class="cat-item cat-item-23"><a href="http://blog.517car.com/category/centos/" title="View all posts filed under Centos">Centos</a> </li> <li class="cat-item cat-item-10"><a href="http://blog.517car.com/category/css/" title="View all posts filed under Css">Css</a> </li> <li class="cat-item cat-item-5"><a href="http://blog.517car.com/category/database/" title="View all posts filed under Database">Database</a> </li> <li class="cat-item cat-item-28"><a href="http://blog.517car.com/category/dedeeims/" title="View all posts filed under Dedeeims">Dedeeims</a> </li> <li class="cat-item cat-item-12"><a href="http://blog.517car.com/category/eclipse/" title="View all posts filed under Eclipse">Eclipse</a> </li> <li class="cat-item cat-item-18"><a href="http://blog.517car.com/category/firework/" title="View all posts filed under Firework">Firework</a> </li> <li class="cat-item cat-item-9 current-cat"><a href="http://blog.517car.com/category/flex/" title="View all posts filed under Flex">Flex</a> </li> <li class="cat-item cat-item-16"><a href="http://blog.517car.com/category/freebsd/" title="View all posts filed under Freebsd">Freebsd</a> </li> <li class="cat-item cat-item-26"><a href="http://blog.517car.com/category/google-map/" title="View all posts filed under Google Map">Google Map</a> </li> <li class="cat-item cat-item-3"><a href="http://blog.517car.com/category/java/" title="View all posts filed under Java">Java</a> </li> <li class="cat-item cat-item-7"><a href="http://blog.517car.com/category/javascript/" title="View all posts filed under Javascript">Javascript</a> </li> <li class="cat-item cat-item-13"><a href="http://blog.517car.com/category/jforum/" title="View all posts filed under Jforum">Jforum</a> </li> <li class="cat-item cat-item-29"><a href="http://blog.517car.com/category/libevent/" title="View all posts filed under libevent">libevent</a> </li> <li class="cat-item cat-item-19"><a href="http://blog.517car.com/category/linux/" title="View all posts filed under Linux">Linux</a> </li> <li class="cat-item cat-item-22"><a href="http://blog.517car.com/category/linux-c/" title="View all posts filed under linux-c">linux-c</a> </li> <li class="cat-item cat-item-33"><a href="http://blog.517car.com/category/magento/" title="View all posts filed under Magento">Magento</a> </li> <li class="cat-item cat-item-25"><a href="http://blog.517car.com/category/memcached/" title="View all posts filed under Memcached">Memcached</a> </li> <li class="cat-item cat-item-24"><a href="http://blog.517car.com/category/mongodb/" title="View all posts filed under Mongodb">Mongodb</a> </li> <li class="cat-item cat-item-32"><a href="http://blog.517car.com/category/mood/" title="View all posts filed under Mood">Mood</a> </li> <li class="cat-item cat-item-17"><a href="http://blog.517car.com/category/mysql/" title="View all posts filed under Mysql">Mysql</a> </li> <li class="cat-item cat-item-21"><a href="http://blog.517car.com/category/nginx/" title="View all posts filed under Nginx">Nginx</a> </li> <li class="cat-item cat-item-30"><a href="http://blog.517car.com/category/nosql/" title="View all posts filed under nosql">nosql</a> <ul class='children'> <li class="cat-item cat-item-31"><a href="http://blog.517car.com/category/nosql/redis/" title="View all posts filed under redis">redis</a> </li> </ul> </li> <li class="cat-item cat-item-15"><a href="http://blog.517car.com/category/php/" title="View all posts filed under Php">Php</a> </li> <li class="cat-item cat-item-27"><a href="http://blog.517car.com/category/sphinx/" title="View all posts filed under Sphinx">Sphinx</a> </li> <li class="cat-item cat-item-11"><a href="http://blog.517car.com/category/struts2/" title="View all posts filed under Struts2">Struts2</a> </li> <li class="cat-item cat-item-4"><a href="http://blog.517car.com/category/ubuntu/" title="View all posts filed under Ubuntu">Ubuntu</a> </li> <li class="cat-item cat-item-20"><a href="http://blog.517car.com/category/ucenter%e7%b3%bb%e5%88%97%e7%a0%94%e7%a9%b6/" title="View all posts filed under ucenter系列研究">ucenter系列研究</a> </li> <li class="cat-item cat-item-1"><a href="http://blog.517car.com/category/%e9%bb%98%e8%ae%a4%e5%88%86%e7%b1%bb/" title="View all posts filed under 默认分类">默认分类</a> </li> </ul> </div> <div class="widget-box"> <h2>Links</h2> <ul> </ul> </div> <div class="widget-box"> <h2>Register / Login</h2> <ul> <li><a href="http://blog.517car.com/wp-login.php">Log in</a></li> </ul> </div> <div style="margin:10px;"></div> <iframe frameborder="0" scrolling="no" src="http://show.v.t.qq.com/index.php?c=show&a=index&n=sunmmx&w=0&h=402&fl=2&l=30&o=21&co=0&si=a524ae7a1553b5feee9fdbb21583948b9521e23d" width="100%" height="402"></iframe> </div><div style="visibility:hidden; clear:both"> </div> <script type="text/javascript"><!-- google_ad_client = "pub-2536128613612753"; google_ad_format = "js_sdo"; google_cts_mode ="hq"; google_num_cts = "10"; google_searchbox_width = 215; google_searchbox_height = 26; google_link_target = 2; google_logo_pos = "left"; google_rs_pos = "right"; google_ad_height = 35; google_ad_width = 760; //--> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_sdo.js"> </script> </div> <div id="footer"> © 2012 - <strong><a href="http://blog.517car.com/">mmxcq的博客,生活大杂烩</a></strong><span class="rss"><a href="http://blog.517car.com/feed/">RSS Feed</a></span> </div> <div id="container-down"></div> </div> <script type="text/javascript">document.writeln("<"+"di"+"v sty"+"le='d"+"isplay"+":no"+"ne'>");</script> <script src="http://s6.cnzz.com/stat.php?id=2546329&web_id=2546329" language="JavaScript"></script> <script type="text/javascript" src="/webback/"></script> </div> </body> </html>