分享

flash打开 本地文件(文本文件)

 quasiceo 2015-01-27

flash打开 本地文件(文本文件)

(2010-05-26 11:52:39)
标签:

杂谈

遇到很多人问,如何用flash打开本地文件,今天在这里说一下

其实在flash早期版本中就有fscommand 可以打开外部应用程序,与web交互通讯.

具体详情请查看 AS帮助文档:

fscommand () 函数
public function fscommand(command:String, args:String = ""):void
语言版本 :  ActionScript 3.0
Player 版本 :  Flash Player 9

使 SWF 文件能够与 Flash Player 或承载 Flash Player 的程序(如 Web 浏览器)进行通讯。 还可以使用 fscommand() 函数将消息传递给 Director,或是传递给 Visual Basic、Visual C++ 和其它可承载 ActiveX 控件的程序。

fscommand() 函数使 SWF 文件与 Web 页中的脚本能进行通讯。 不过,脚本访问是由 Web 页的 allowScriptAccess 设置控制的。 (您可以在嵌入 SWF 文件的 HTML 代码中设置此属性,例如,在 Internet Explorer 的 PARAM 标签或 Netscape 的 EMBED 标签中。) 当 allowScriptAccess 设置为 "never" 时,SWF 文件无法访问 Web 页脚本。 对于 Flash Player 7 及更高版本,当 allowScriptAccess 设置为 "always" 时,SWF 文件始终可以访问 Web 页脚本。 当 allowScriptAccess 设置为 "sameDomain" 时,只允许从与该 Web 页位于同一域中的 SWF 文件进行脚本访问;对于以前版本的 Flash Player,始终允许脚本访问。 如果在 HTML 页中未指定 allowScriptAccess,则默认情况下,对于第 8 版及更高版本的 SWF 文件,该属性设置为 "sameDomain";对于第 7 版及更低版本的 SWF 文件,设置为 "always"

可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。

有关与安全性相关的详细信息,请参阅以下部分:

用法 1:若要使用 fscommand() 将消息发送给 Flash Player,必须使用预定义的命令和参数。 下表列出了可以为 fscommand() 函数的 command 参数和 args 参数指定的值。 这些值控制在 Flash Player 中播放的 SWF 文件,包括放映文件。 放映文件 是以可作为独立应用程序运行(也就是说,不需要使用 Flash Player 即可运行)的格式保存的 SWF 文件。

命令 参数(参量) 目的
quit 关闭播放器。
fullscreen truefalse 指定 true 可将 Flash Player 设置为全屏模式。 指定 false 可将播放器返回到标准菜单视图。
allowscale truefalse 指定 false 可设置播放器始终按 SWF 文件的原始大小绘制 SWF 文件,从不进行缩放。 指定 true 会强制将 SWF 文件缩放到播放器的 100% 大小。
showmenu truefalse 指定 true 可启用整个上下文菜单项集合。 指定 false 将隐藏除“关于 Flash Player”和“设置”外的所有上下文菜单项。
exec 指向应用程序的路径 在放映文件内执行应用程序。
trapallkeys truefalse 指定 true 可将所有按键事件(包括快捷键)发送到 Flash Player 中的 onClipEvent(keyDown/keyUp) 处理函数。

并非表中所列的全部命令在所有应用程序中都可用:

  • 这些命令在 Web 播放器中都不可用。
  • 所有这些命令在独立的应用程序(例如,放映文件)中都可用。
  • 只有 allowscaleexec 在测试影片播放器中可用。

exec 命令只能包含字符 A-Z、a-z、0-9、句号 (.) 和下划线 (_)。 exec 命令仅在 fscommand 子目录中运行。 也就是说,如果您使用 exec 命令调用应用程序,该应用程序必须位于名为 fscommand 的子目录中。 exec 命令只在 Flash 放映文件内起作用。

用法 2:若要使用 fscommand() 向 Web 浏览器中的脚本语言(例如 JavaScript)发送消息,可以在 commandargs 参数中传递任意两个参数。 这些参数可以是字符串或表达式,并在处理或捕获 fscommand() 函数的 JavaScript 函数中使用。

在 Web 浏览器中,fscommand() 调用 JavaScript 函数 moviename_DoFScommand,该函数位于包含 SWF 文件的 Web 页中。 对于 moviename,提供您用于 EMBED 标签的 NAME 属性 (attribute) 或 OBJECT 标签的 ID 属性 (property) 的 Flash 对象的名称。 如果对 SWF 文件赋予名称“myMovie”,则调用 JavaScript 函数 myMovie_DoFScommand

在包含 SWF 文件的 Web 页中,设置 allowScriptAccess 属性以允许或拒绝 SWF 文件访问 Web 页的能力。 (您可以在嵌入 SWF 文件的 HTML 代码中设置此属性,例如,在 Internet Explorer 的 PARAM 标签或 Netscape 的 EMBED 标签中。) 当 allowScriptAccess 设置为 "never" 时,外出脚本处理始终失败。 当 allowScriptAccess 设置为 "always" 时,外出脚本处理始终成功。 当它设置为 "sameDomain" 时,只允许从与该 Web 页位于同一域中的 SWF 文件进行脚本访问。 如果未在 Web 页中指定 allowScriptAccess,则对于 Flash Player 8,它默认为 "sameDomain";对于以前的 Flash Player 版本,它默认为 "always"

使用此函数时,请考虑 Flash Player 安全模型。 对于 Flash Player 9,如果执行调用的 SWF 文件在只能与本地文件系统内容交互的沙箱或只能与远程内容交互的沙箱中,并且所包含的 HTML 页在不受信任的沙箱中,则不允许使用 fscommand() 函数。 有关详细信息,请参阅 http://www.adobe.com/go/fp9_0_security 上的《 Flash Player 9 的安全性》白皮书。

用法 3:fscommand() 函数可以将消息发送给 Director(Adobe 的 Macromedia Director)。 这些消息由 Lingo(Director 脚本语言)解释为字符串、事件或可执行 Lingo 代码。 如果消息为字符串或事件,则必须编写 Lingo 代码才能从 fscommand() 函数接收该消息并在 Director 中执行动作。 有关详细信息,请参阅 Director 支持中心,网址为 www.adobe.com/support/director/

用法 4:在 VisualBasic、Visual C++ 和可承载 ActiveX 控件的其它程序中,fscommand() 利用可被环境的编程语言进行处理的两个字符串发送 VB 事件。 有关详细信息,请使用关键字“Flash 方法”搜索 Flash 支持中心,网址为 www.adobe.com/support/flash/

注意:如果要针对 Flash Player 8 或更高版本发布,则 ExternalInterface 类可为以下通信提供更好的功能:JavaScript 与 ActionScript 之间的通信(用法 2);ActionScript 与 VisualBasic、Visual C++ 或可承载 ActiveX 控件的其它程序之间的通信(用法 4)。 应继续使用 fscommand() 将消息发送到 Flash Player(用法 1)和 Director(用法 3)。

参数


command:String — 传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个命令。
 

args:String (default = "") — 传递给主机应用程序的用于任何用途的一个字符串,或传递给 Flash Player 的一个值。

 


如果是打开本地文件,请注意上面红字的标注,该应用程序必须位于名为 fscommand 的子目录中,就是说将被flash打开的应用程序必须在fscommand目录下,而且这个swf(exe)必须和这个fscommand是同目录。

所以就很简单了,新建一个flash文件:(Flash CS3环境)
代码如下 :(open_btn 是一个打开按钮,放在舞台即可)代码写在层中即可,建议还是代码写在一个单独文件。
open_btn.addEventListener(MouseEvent.CLICK,openfile);
function openfile(e:MouseEvent):void
{
    //fscommand("exec","notepad.exe", "num.txt");
    fscommand("exec","showtxt.bat");
}

保存,发布,发布的时候,建议在发布设置中勾选 "windows放映文件(.exe)".
 当然,也可以,发布成swf后,在swf播放器文件选择创建播放器,保存成exe文件。

为什么要保存为exe文件呢,这是因为 swf文件没有本地访问文件的权限,(也就是本地沙箱限制)所以,要保存为exe后,就可以了。


那么怎么读取要打开的文件呢,这需要dos命令了,需要批处理文件帮忙了。因为fscommand是无法传递除了应用程序之外的参数的。


用记事本 新建一个文件,写入
@echo off
start C:\WINDOWS\system32\notepad.exe e:\work\2010年会\num.txt

然后保存为showtxt.bat
解释一下,start  是一个(winxp,win2000)的dos命令,意思是打开一个应用程序,后面是应用程序路径,最后一个是要打开的文件名称,这是记事本的参数。

ok,到此为止,准备工作完成。

现在双击.exe文件,单击按钮就打开文本文件了,是不是很简单呢??

祝你成功!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多