Как получить доступ к bgcolor из swfobject? - PullRequest
2 голосов
/ 23 августа 2011

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";
...

Как я могу изменить этот bgcolor DYNAMICALLY в as3?Как мне получить доступ к этому flashvar params.bgcolor?

Спасибо

Ответы [ 2 ]

3 голосов
/ 23 августа 2011

В 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.stageWidth и stage.stageHeight оба возвращают 0), поэтому Возможно, вы захотите подождать один кадр, прежде чем в первый раз вызывать вышеуказанный код рисования.

Этот метод намного лучше использования режима прозрачного окна и изменения фона за SWF (в HTML), поскольку использование wmode=transparent может иногда вызывать странные проблемы (например, ошибки ввода с клавиатуры в некоторых браузерах) и снизит производительность, часто значительно.

Всегда используйте прозрачный wmode, если вам действительно нужно, чтобы он был прозрачным, например когда за ним есть HTML-элементы, которые должны быть видны.

2 голосов
/ 23 августа 2011
//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>

попробуйте так.его работа.

...