Другой и ошеломляющий простой обходной путь, который я использовал годами, - это просто создать модуль вывода прямо в SWF. Все это означает комбинацию клавиш, которая прикрепляет мувиклип с текстовым полем. Все мои следы идут в это текстовое поле вместо (или в дополнение к) окна вывода. За прошедшие годы я, конечно, усовершенствовал его, сделав окно перетаскиваемым, изменяемого размера и т. Д. Но мне никогда не требовался какой-либо другой подход для простого ведения журнала, и он на 100% надежен и может использоваться на всех платформах.
[EDIT - ответ на комментарий]
Там нет оповещения, совсем как функция JavaScript (). Но использовать внутреннее текстовое поле очень просто:
ACTIONSCRIPT 1 VERSION
(см. Примечания внизу)
/* import ExternalInterface package */
import flash.external.*;
/* Create a movieclip for the alert. Set an arbitrary (but very high) number for the depth
* since we want the alert in front of everything else.
*/
var alert = this.createEmptyMovieClip("alert", 32000);
/* Create the alert textfield */
var output_txt = alert.createTextField("output_txt", 1, 0, 0, 300, 200);
output_txt.background = true;
output_txt.backgroundColor = 0xEFEFEF;
output_txt.selectable = false;
/* Set up drag behaviour */
alert.onPress = function()
{
this.startDrag();
}
alert.onMouseUp = function()
{
stopDrag();
}
/* I was using a button to text EI. You don't need to. */
testEI_btn.onPress = function()
{
output_txt.text = (ExternalInterface.available);
}
Примечания: Это хорошо работает для AS1 и хорошо переведет на AS2 (лучше всего использовать строгую типизацию данных, если это не требуется). Должно работать во Flash Player 8-10. ExternalInterface был добавлен во Flash 8, поэтому он не будет работать в предыдущих версиях проигрывателя.
ACTIONSCRIPT 3 VERSION
var output_txt:TextField = new TextField();
addChild(output_txt);
output_txt.text = (String(ExternalInterface.available));
Если вы хотите немного улучшить это:
var alert:Sprite = new Sprite();
var output_txt:TextField = new TextField();
output_txt.background = true;
output_txt.backgroundColor = 0xEFEFEF;
output_txt.selectable = false;
output_txt.width = 300;
output_txt.height = 300;
alert.addChild(output_txt);
addChild(alert);
alert.addEventListener(MouseEvent.MOUSE_DOWN, drag);
alert.addEventListener(MouseEvent.MOUSE_UP, stopdrag);
output_txt.text = (String(ExternalInterface.available));
function drag(e:MouseEvent):void
{
var alert:Sprite = e.currentTarget as Sprite;
alert.startDrag();
}
function stopdrag(e:MouseEvent):void
{
var alert:Sprite = e.currentTarget as Sprite;
alert.stopDrag();
}
[/ EDIT]