2012-08-23 26 views
5

我使用下面的函數來創建用於顯示閃存對象的代碼。原始的Flash大小爲320x240,但我想將其顯示爲200x150,所以我使用的參數寬度爲200,高度爲150.所有瀏覽器均正常工作,但chrome不正常。它顯示爲200x151(檢查代碼顯示200x151大小)。爲什麼?Chrome刻度盤閃爍不正確

function getFlashCode(params) 
{ 
    debug('getFlashCode'); 
    var defaultParams = {movie: '', flashvars: {}, width:'', height: ''}; 
    for (var key in defaultParams) 
    { 
     if (params[key] === undefined) 
     params[key] = defaultParams[key]; 
    } 

    var flashvars = ''; 
    for (var key in params.flashvars) 
     flashvars += encodeURIComponent(key) + '=' + encodeURIComponent(params.flashvars[key]) + '&'; 

    var id = "fl" + Math.random(); 
    var code=""; 
     code += "   <object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"" + params.width + "\" height=\"" + params.height + "\" align=\"middle\" id=\"" + id + "\">"; 
     code += "    <param name=\"movie\" value=\"" + params.movie + "\" \/>"; 
     code += "    <param name=\"quality\" value=\"high\" \/>"; 
     code += "    <param name=\"play\" value=\"true\" \/>"; 
     code += "    <param name=\"loop\" value=\"true\" \/>"; 
     code += "    <param name=\"wmode\" value=\"transparent\" \/>"; 
     code += "    <param name=\"scale\" value=\"showall\" \/>"; 
     code += "    <param name=\"menu\" value=\"true\" \/>"; 
     code += "    <param name=\"devicefont\" value=\"false\" \/>"; 
     code += "    <param name=\"salign\" value=\"\" \/>"; 
     code += "    <param name=\"allowScriptAccess\" value=\"always\" \/>"; 
     code += "    <param name=\"flashvars\" value=\"" + flashvars + "\" \/>"; 
     code += "    <!--[if !IE]>-->"; 
     code += "    <object type=\"application\/x-shockwave-flash\" flashvars=\""+ flashvars + "\" data=\"" + params.movie + "\" width=\"" + params.width + "\" height=\"" + params.height + "\">"; 

     code += "     <param name=\"movie\" value=\"" + params.movie + "\" \/>"; 
     code += "     <param name=\"quality\" value=\"high\" \/>"; 
     code += "     <param name=\"play\" value=\"true\" \/>"; 
     code += "     <param name=\"loop\" value=\"true\" \/>"; 
     code += "     <param name=\"wmode\" value=\"transparent\" \/>"; 
     code += "     <param name=\"scale\" value=\"showall\" \/>"; 
     code += "     <param name=\"menu\" value=\"true\" \/>"; 
     code += "     <param name=\"devicefont\" value=\"false\" \/>"; 
     code += "     <param name=\"salign\" value=\"\" \/>"; 
     code += "     <param name=\"allowScriptAccess\" value=\"always\" \/>"; 
     code += "     <param name=\"flashvars\" value=\"" + flashvars + "\" \/>"; 
     code += "    <\/object>"; 
     code += "    <!--<![endif]-->"; 
     code += "   <\/object>"; 
    return code; 
} 
+3

順便說一句,你可能對使用SWFObject嵌入Flash文件更好。它是多功能的,並且很好地保證了瀏覽器的兼容性。 – Kos

+3

現在Pepper Flash是Chrome的默認Flash插件,我一直注意到Flash和Chrome越來越古怪。我想知道這是否是另一種情況?您可能已經爲Chrome安裝了多個Flash插件,您可以禁用Pepper Flash,然後嘗試下載更少的bug:chrome:// plugins –

回答

1

首先,該代碼是相當難以理解的,而且您還需要解決一些問題。就像Kos說的那樣,我強烈建議你使用swfobject嵌入你的Flash文件,因爲它處理所有瀏覽器的怪異。此外,大部分參數並不需要,因爲它們的默認值已經指定了。這將是我推薦的方式做到這一點:

<script type="text/javascript" src="swfobject.js"></script> 
<script type="text/javascript"> 
var flashvars = {}; 
var params = {}; 
var attributes = {}; 

swfobject.embedSWF("filename.swf", "div-id-here", "200", "150", "9.0.0","expressInstall.swf", flashvars, params, attributes); 
</script> 

然後你只需要與您指定並在JavaScript代碼中設置一個ID添加div元素,你就大功告成了。我還必須提及一個我立即看到的問題:300/240的寬高比爲1.25,而200/150的比例爲1.333,這意味着除非閃光燈按比例縮放和改變元素在大小上,除非您更改比例模式(其中showall不是潛在選項之一),否則您的Flash電影上會有邊界以保持比例的方式。

我不知道閃光燈是如何編程的,或者你正在嘗試做什麼,但我會留給你試試看,並閱讀params documentation on Adobe's site