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文件)中工作]] << [