Flash SWF,可以从浏览器内部读取文件内容吗?

Posted

技术标签:

【中文标题】Flash SWF,可以从浏览器内部读取文件内容吗?【英文标题】:Flash SWF, reading the file contents from inside the browser, possible? 【发布时间】:2017-07-11 00:17:02 【问题描述】:

我有一个 actionscript 项目,我将其部署为 Air 桌面应用程序,并使用 Flash 插件在浏览器中部署。

我的桌面部署读取 SWF 文件本身,创建文件的哈希并将其发送到我的服务器。如果哈希与 SWF 的预期不匹配,则将其自身上传到我的服务器以进行进一步检查。这都使用了 flash.filesystem 库。

在浏览器中部署为 Flash 文件时也可以这样做。我无权访问 flash.filesystem 进行浏览器部署。

除了使用文件系统之外,还有其他方法可以读取 SWF 本身。

【问题讨论】:

【参考方案1】:

根据这篇文章 (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/Worker.html),您可以通过 loaderInfo.bytes:ByteArray 访问整个 SWF 内容,因此无需加载任何内容。享受吧。

回退到加载:

var aRequest:URLRequest = new URLRequest;

// Property loaderInfo.url contains the full path to the SWF.
aRequest.url = loaderInfo.url;

var aLoader:URLLoader = new URLLoader;

// Set data format to binary instead of default text.
aLoader.dataFormat = URLLoaderDataFormat.BINARY;
aLoader.addEventListener(Event.COMPLETE, onReady);
aLoader.load(aRequest);

function onReady(e:Event):void

    var anSWF:ByteArray = aLoader.data as ByteArray;
    trace(anSWF.length);

【讨论】:

太好了,loaderInfo.bytes 包含实际的 swf 数据本身,正是我想要的。 进一步检查发现如下,实际的swf本身和loaderInfo.bytes上的内容不同,这是因为loaderInfo.bytes包含解压后的版本。 @MartinSmith 好的,添加了加载解决方案。可惜 loaderInfo.bytes 没用。 没关系,如果有人对为什么文件不同感到困惑,我只是发表了评论。【参考方案2】:

要获取 SWF 字节,请使用 URLStream API 将字节接收到某个 bytearray 变量中。

然后您可以使用ByteArray API 来读取(处​​理)bytearray

【讨论】:

谢谢,但我认为这种方法依赖于您指定 swf 的位置是否正确。即使您阅读了文件的位置,您也会依赖浏览器告诉您的信息吗?我认为这与桌面实现有些不同,因为我询问了正在询问的实际 swf 的位置,所以我确定我正在阅读正确的文件。 见上面的 cmets ref loaderInfo.bytes。 不管有没有更简单的解决方案,URLStream 是不必要的,因为你需要整个内容。 URLLoader.dataFormat = URLLoaderDataFormat.BINARY 就足够了。【参考方案3】:

您可以将 Flex 代码部署到 AIR 桌面应用程序,该应用程序被转换为 SWF 文件,可在浏览器中作为嵌入对象使用。 请阅读更多here。

【讨论】:

以上是关于Flash SWF,可以从浏览器内部读取文件内容吗?的主要内容,如果未能解决你的问题,请参考以下文章

[Ctrl + C在浏览器为Google Chrome时无法在Flash Player(swf文件)中工作]] << [

如何从flash player(swf)下载/复制音频脚本

在 Unity 中打开 SWF 游戏 [关闭]

如何以 SWF 格式创建播放和暂停?

通过 .swf 文件从网页中获取标题标签的内容

flash都能输出啥格式