AS项目中的元标记无法处理百分比宽度/高度值?

时间:2011-04-05 01:46:12

标签: flex flash meta-tags

我使用Flash Builder IDE设置了一个ActionScript项目。使用Flex 4编译器进行编译。在我的应用程序类的顶部,我有:

[SWF(width="100%", height="100%")]
public class MediaPlayer extends MovieClip {

这是编译器可以接受的发布(它会抛出错误,说它无法解析宽度/高度值)。很讨厌。我试图以“正确”的方式做事,但以下工作都没有:

[SWF(percentWidth="100%", percentHeight="100%")]
[SWF(percentWidth="100", percentWidth="100")]
[SWF(widthPercent="100%", heightPercent="100%")]
[SWF(widthPercent="100", heightPercent="100")]

当我使用其中任何一个时,stageHeight为375(Flex默认值),stageWidth为500(默认值)。这样做的正确方法是什么?

我的Flash文件正在网页上嵌入,我只需要宽度和高度属性来定义SWF会遵守的Flash内容范围。

更新 为了给出更多的上下文,我无法控制这个SWF的嵌入方式 - 它由Facebook代码处理其插播媒体内容。

<div id="u162171_43" style="width:398px;height:259px">
    <iframe width="398" height="259" frameborder="0" src="https://s-static.ak.facebook.com/common/referer_frame.php">
        <body style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">
           <embed type="application/x-shockwave-flash" src="http://www.rootmusicd.com/flash/fb/rm_player.swf?v=140&amp;d=www.rootmusicd.com&amp;id=102199429820702" width="398" height="259" style="" id="swf_u187610_44" name="swf_u187610_44" bgcolor="#FFFFFF" quality="high" scale="scale" allowfullscreen="true" allowscriptaccess="never" salign="tl" wmode="opaque" flashvars="bridge_connection_id=_conn_4d9b46f8c10ea6089493440&amp;payer_connection_id=_payer_4d9b46f8c10f64d23500210&amp;width=398&amp;height=259">
        </body>
    </iframe>
</div>

因此宽度和高度属性在这里显式设置为数字。我不太了解'scale'属性;也许它会在这里玩?并且,要明确:它将按预期工作如果我将[SWF]元标记设置为宽度“100%”和高度“100%”...所以看起来它实际上是更喜欢在浏览器环境中编译的参数。也许我还缺少其他设置?

2 个答案:

答案 0 :(得分:2)

简答:在您嵌入SWF的网页中设置所需的大小,而不是在AS源中。

完整答案:作为元数据,编译到SWF中的宽度和高度基本上是建议。当显示SWF时,其大小完全由其容器决定,因此元数据获得荣誉的唯一时间是容器选择阅读并遵守它。通常,它们只是容器,它是独立的播放器 - 因此,如果您双击SWF,它应该以您在源中指定的大小启动。但是当您显示嵌入在网页中的SWF时,宽度/高度元数据将被完全忽略,并且SWF的大小与页面中的所有其他元素(通过嵌入HTML,CSS等)类似地确定。

除了元数据为什么不占用百分比的问题之外,所有这些都略有不同,但希望在这种情况下更有意义......并且因为元数据不会影响浏览器中发生的事情,所以它有点学术性。我无法回答percentWidth等如何适应事物,因为它似乎没有记录,但我认为设置这些值也不会影响SWF在浏览器中的大小(当然除外) FlashBuilder正在基于元数据生成HTML,或类似的东西 - 我对FB不太了解。)

<强>更新

我想我在这里看到了你的问题。我们需要备份一下并讨论扩展。只要SWF的大小与其视口的大小不同(即通过其容器分配给Flash的大小),Flash就如何缩放内容做出决定,具体取决于stageScaleMode。该链接中描述了四个缩放选项的详细信息,但基本上内容未缩放,或者按比例放大或缩小以保留或不保留宽高比。

但是,为了让Flash了解是否/如何扩展内容,内容必须具有“固有”大小。我们一直在讨论的高度/宽度元数据用作该大小。因此,如果您的HTML容器是200x400并且您使用“精确匹配”scalemode,那么如果您的元数据描述的大小为100x200,则您的内容将以双倍大小显示,如果您的元数据显示为400x800,则SWF将显示为一半大小。如果使用“无比例”缩放模式,则元数据不会影响内容的缩放。 (内容仍然根据stageAlign在容器中对齐。)

考虑到前面的内容,我希望很明显,用于大小元数据的“正确”值取决于您使用的缩放类型以及内容如何适应(或不适应)不同大小的容器。如果您的内容在259x398区域内静态布局,则259x398是要使用的正确元数据大小。这样,如果您要在更大的容器中查看它,您的内容将按照预期扩展,具体取决于缩放模式。但是,如果您的内容动态调整为可变大小的容器,并在运行时自动布局其内容,那么您几乎肯定需要使用“无比例”模式 - 在这种情况下,您使用的元数据大小无关紧要,因此flex默认大小应该可以正常工作。

顺便提一下,缩放模式可以在HTML嵌入参数中定义,但您也可以在运行时覆盖该设置。因此,找出满足您需求的缩放模式,并在内容初始化之前设置该模式,然后您应该能够找到有效的元数据大小。

答案 1 :(得分:0)

将SWF标记设置为正确的宽高比(以像素为单位),然后在页面上的嵌入代码中使用100%作为宽度和高度

swfobject.embedSWF('foo.swf','bar','100%','100%','9');