如何从swfobject访问bgcolor?

时间:2011-08-23 13:34:09

标签: flash actionscript-3 flash-cs5

Flashbuilder生成一个html,其中存储了bgcolor(通过javascript):

...  
var swfVersionStr = "10.0.0";
        <!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
        var xiSwfUrlStr = "playerProductInstall.swf";
        var flashvars = {};
        var params = {};
        params.quality = "high";
        params.bgcolor = "#ff0000";
        params.allowscriptaccess = "sameDomain";
        params.allowfullscreen = "true";
...

如何在as3中动态更改bgcolor? 我如何访问这个flashvar params.bgcolor?

由于

2 个答案:

答案 0 :(得分:3)

SWF文件中嵌入了背景颜色属性(如帧速率,默认尺寸等),但嵌入环境(通常为HTML)可以在嵌入时覆盖所有这些设置。此外,其中一些可以在运行时被ActionScript覆盖。但是,SWF背景颜色不属于最后一类。

相反,您可以使用图形API在所有内容后面绘制一个矩形,例如通过执行以下操作:

root.graphics.beginFill(0xffcc00); // Replace with your color
root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);

如果存在SWF调整大小的风险,您应该将上述两行放在事件处理程序中,并将其作为监听器添加到Event.RESIZE的舞台上,如下所示:

function handleStageResize(ev : Event) : void
{
    root.graphics.clear();
    root.graphics.beginFill(0xffcc00); // Replace with your color
    root.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
}

// Add the listener
stage.addEventListener(Event.RESIZE, handleStageResize);

还要注意某些旧浏览器存在一些问题,在正确设置阶段维度之前,将调用ActionScript的主要入口点(意味着stage.stageWidthstage.stageHeight返回0)所以你可能想在第一次调用上面的绘图代码之前等待一帧。

这种方法比使用透明窗口模式和修改SWF后面的背景(用HTML格式)要好得多,因为使用wmode=transparent有时会导致奇怪的问题(例如某些键盘输入错误)浏览器)并且通常会显着降低性能。

如果您真的需要透明的wmode,那么只能使用透明的wmode,例如当它背后有HTML元素需要可见时。

答案 1 :(得分:2)

//as3
externalInterface.call("myFuction", "#FF0000");

//javascript 
 var myClr; 
 function myFuction(myVal)
 {
    myClr = myVal;
    window.action = actionFunc();
 }
 window.action = actionFunc();
 function actionFunc()
 {
    var flashvars = {};
    var params = {};
    var attributes = {};
    params.bgcolor = myClr;
    flashvars.mp3="mast.mp3";
    var so = new swfobject.embedSWF("player_slim.swf", "myContent", "300", "120", "9.0.0",true, flashvars, params, attributes);
    so.write("myContent");      
}

 <div id="myContent">
 </div>

试试这种方式。它的工作。