首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActionScript能分辨出主权财富基金什么时候发布吗?

ActionScript能分辨出主权财富基金什么时候发布吗?
EN

Stack Overflow用户
提问于 2010-04-17 09:05:46
回答 5查看 2.3K关注 0票数 10

我想写一个小类,添加一个显示SWF从Flash发布的日期的日/月框。

我工作的公司经常生产很多很多的主权财富基金和每个主权财富基金的许多版本,在几个月的过程中迭代。我们用来与客户交流的一个版本跟踪系统是一个日/月日期框,它给出了SWF的发布日期。到目前为止,我们一直在手工填写发布日期。如果有任何方法可以用ActionScript编程来实现这一点,那就太棒了。

有什么见解吗?基本上,我所需要的就是提供发布日期的调用,甚至..任何关于发布SWF的情况,我可以用来滚成某种形式的..。自动版本识别,此SWF唯一的。

那么,ActionScript能判断出主权财富基金是什么时候发布的吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-12 08:53:04

乔治是对的。Adobe将一个未记录的包含编译日期的ProductInfo标记偷偷添加到每个已编译的swf中。DisplayObject.loaderInfo.bytes包含加载显示对象的完整的未压缩swf。

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/DisplayObject.html#loaderInfo

因此,获取swf编译日期的最快方法不需要外部库(从显示对象):

代码语言:javascript
复制
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");
}

SWF规范:http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf

票数 24
EN

Stack Overflow用户

发布于 2010-09-26 07:11:32

你也可以使用强大的as3swf库从SWF字节码中读取数据。查看this

票数 2
EN

Stack Overflow用户

发布于 2010-04-17 09:44:18

恐怕你不能在Actionscript中做到这一点。根据您构建swfs的方式,可能有几个选择。例如,如果使用Flash IDE,则可以使用JSFL script发布swf。这个jsfl可以替换一个占位符变量,您将在其中存储发布日期和发布swf (很长时间没有编写JSFL脚本了,但是让它工作起来应该不会太难)。

因此,假设您有一个Version类:

代码语言:javascript
复制
public class Version {

    public var publicationDate:Date = new Date();

}

您的脚本应该读取该类所在的文件,找到该行并将其替换为当前日期:

如下所示:

代码语言:javascript
复制
var curDate = new Date();
var dateLine = "public var publication:Date = new Date(" + curDate.getFullYear() + "," + curDate.getMonth() + "," + curDate.getDate() +");";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2656827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档