铬刻度闪烁错误

Chrome scales flash incorrectly

本文关键字:错误 闪烁      更新时间:2023-09-26

我使用下面的函数创建一个显示flash对象的代码。原来的闪光灯尺寸是320x240,但我想显示为200x150,所以我使用了params宽度为200,高度为150的函数。所有浏览器都能正常工作,但chrome不能。它显示为200x151(检查代码显示为200x161大小)。为什么?

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

首先,该代码相当不可读,您将面临一些问题。正如科斯所说,我强烈建议你使用swfobject来嵌入你的Flash文件,因为它可以处理所有浏览器的怪异之处。此外,大多数param都不需要,因为它们的默认值已经指定了。这将是我推荐的方法:

<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,这意味着除非闪光灯根据大小进行缩放和改变元素,否则你的flash电影上会有边框,以保持原来的比例,除非您更改缩放模式(showall不是潜在选项之一)。

我不知道flash是如何编程的,也不知道你到底想做什么,但我会让你自己尝试一下,并阅读Adobe网站上的params文档。