如何从我的应用程序swf中访问embed对象的width属性?

时间:2012-04-04 14:52:57

标签: actionscript-3 flash flex flex3 flash-builder

我有一个带有根mx的Flex 3项目:应用程序。宽度和高度设置为pct值,因为应用程序有几种尺寸可供用户选择,因此在embed的width属性上设置了正确的大小。

我正在试图弄清楚如何访问该属性中的值。我在几个地方读到this.root.loaderInfo.width应该给我这个值,但它总是返回500,我猜测它来自默认的应用程序容器宽度(参见http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf62d75-7fff.html)。

我意识到我可以将它作为flashvar传递,但由于项目的性质,在这种情况下这不是一个好的解决方案。我也尝试过Application.application.width,stage.width和stage.stageWidth,仅举几例。我不能依赖任何这些值,因为它们会根据浏览器缩放级别而改变。

我真正需要的是嵌入的width属性。建议?

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

stage.stageWidth返回的宽度取决于SWF的scale mode设置。 Flex使用的stage.scaleMode = StageScaleMode.NO_SCALE;返回容器的大小。它受嵌入大小和浏览器缩放级别的影响。

如果stage.scaleMode设置为其他任何内容,它将返回SWF中定义的维度,并始终返回相同的值。并且,正如您所提到的,loaderInfo.width返回SWF中设置的维度,无论缩放模式还是嵌入维度。不幸的是,没有设置使其受嵌入大小的影响,但浏览器缩放级别。

无论浏览器缩放级别如何,找到容器尺寸的唯一方法是将其作为嵌入代码中的参数传递,或使用ExternalInterface,如wvxvw提及。我可能会选择flash var route - 你在不同的布局之间进行选择,所以它足够适合设置而不是根据容器大小隐式选择。或者,您也可以选择基于尺寸/宽高比范围的布局,而不是特定值。

答案 1 :(得分:0)

结束需要使用外部接口。这是我添加到js嵌入文件中的js:

function getSwfDimensions() {
    var swf = document.getElementById('myMovie');
    sendSwfDimensions({width:swf.width, height:swf.height});
}
function sendSwfDimensions(d) {
    thisMovie("myMovie").sendToActionScript(d);
}
function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

在闪光灯中:

private function getSwfDimensions():void {
    ExternalInterface.addCallback("sendToActionScript", swfDimensionsReceived);
    ExternalInterface.call("getSwfDimensions"); 
}
public function swfDimensionsReceived(d):void {
    //set the width and height
    this._width = this.width = d.width;
    this._height = this.height = d.height;
    //set up a listener to handle browser zoom changes
    this.stage.addEventListener(Event.RESIZE, onStageResize);
}