Chrome刻度不正确

时间:2012-08-23 13:17:57

标签: javascript flash google-chrome params

我使用下面的函数创建一个显示flash对象的代码。原始闪存大小为320x240,但我想将其显示为200x150,因此我使用params宽度为200,高度为150的函数。所有浏览器都能正常工作,但chrome不能。它显示为200x151(检查代码显示200x151大小)。为什么呢?

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;
}

1 个答案:

答案 0 :(得分: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>

然后你只需要添加一个div元素,你可以在javascript代码中指定并设置一个id,然后你就完成了。我还要提到我正在看到的一个问题:300/240的宽高比为1.25,200 / 150的比例为1.333,这意味着除非闪光灯按比例缩放并改变周围的元素在大小上,除非您更改缩放模式(showall不是潜在选项之一),否则您将在Flash影片上设置边框以保持比例符合预期。

我不知道闪存是如何编程的,或者你正在尝试做什么,但是我会让你尝试一下并阅读params documentation on Adobe's site