iva*_*ese 10 flash datetime actionscript-3
我想写一个小课程,添加一个日/月框,显示从Flash发布SWF的日期.
我工作的公司定期生产许多SWF,每个版本都有很多版本,在几个月内迭代.我们用来与客户沟通的版本跟踪系统是日/月日期框,它给出了SWF发布的日期.到目前为止,我们一直在手工填写发布日期.如果有任何方法,我可以使用ActionScript以编程方式执行此操作,这非常棒.
任何见解?基本上,我所需要的只是给我发布日期的电话,甚至是关于发布SWF的情况的任何信息,我可以使用它来进行某种形式的自动版本识别,这是SWF独有的.
那么,ActionScript可以告诉SWF何时发布?
Joo*_*ony 24
乔治是对的.Adobe将一个未记录的ProductInfo标记隐藏到每个编译的swf中,该标记包含编译日期.DisplayObject.loaderInfo.bytes包含加载显示对象的完整未压缩swf.
因此,在没有外部库(来自显示对象)的情况下获取swf编译日期的最快方法是:
import flash.utils.Endian;
import flash.display.LoaderInfo;
import flash.utils.ByteArray;
...
private function getCompilationDate():Date{
if(!stage) throw new Error("No stage");
var swf:ByteArray = stage.loaderInfo.bytes;
swf.endian = Endian.LITTLE_ENDIAN;
// Signature + Version + FileLength + FrameSize + FrameRate + FrameCount
swf.position = 3 + 1 + 4 + (Math.ceil(((swf[8] >> 3) * 4 - 3) / 8) + 1) + 2 + 2;
while(swf.position != swf.length){
var tagHeader:uint = swf.readUnsignedShort();
if(tagHeader >> 6 == 41){
// ProductID + Edition + MajorVersion + MinorVersion + BuildLow + BuildHigh
swf.position += 4 + 4 + 1 + 1 + 4 + 4;
var milli:Number = swf.readUnsignedInt();
var date:Date = new Date();
date.setTime(milli + swf.readUnsignedInt() * 4294967296);
return date; // Sun Oct 31 02:56:28 GMT+0100 2010
}else
swf.position += (tagHeader & 63) != 63 ? (tagHeader & 63) : swf.readUnsignedInt() + 4;
}
throw new Error("No ProductInfo tag exists");
}
Run Code Online (Sandbox Code Playgroud)
SWF规范:http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf