我试图执行一个函数,如window.alert
例如,从actionscript,当html文件和swf文件都使用file:
协议。有没有什么办法从本地内容的actionscript执行js函数?
有人知道这样做吗?
不改变全球闪存安全设置
我试图执行一个函数,如window.alert
例如,从actionscript,当html文件和swf文件都使用file:
协议。有没有什么办法从本地内容的actionscript执行js函数?
有人知道这样做吗?
不改变全球闪存安全设置
看完Controlling access to scripts in a host web page后看起来不可能。
对于在本地运行的SWF文件,只有当SWF文件和包含的网页(如果有的话)位于本地信任的安全沙箱中,才能成功调用这些API。如果内容位于本地网络或本地文件系统沙箱中,则调用这些方法失败。
然后在本地沙箱this page基本上说这是行不通的,除非SWF处于“受信任的本地沙箱”的用户或安装就需要把它英寸
This blog post有关“本地文件系统沙箱“说:
首先,我认为这里的文档有点太慷慨了。从本地文件系统加载的SWF确实面临一些限制。最相关的限制可能是:
- 的SWF做不出来的JavaScript(或VBScript)的调用,无论是通过URL或ExternalInterface的
- 的SWF不能称之为HTTP或HTTPS请求。
- 查询字符串参数(例如Blah.php?查询字符串= QS值)被剥离,并不会传递(即使是要求对本地文件)
您需要更新Flash Player settings,使您的文件路径被列为“受信任的位置。”然后您将能够使用外部接口和其他JS通信方法。
此外,您无法使用外部接口从AS传递默认JS功能(如警报)。你需要编写自定义的功能...
的ActionScript:
import flash.external.ExternalInterface;
ExternalInterface.call("alertFromFlash", 'hello');
的JavaScript:
function alertFromFlash(str) {
alert(str);
}
另外,如果你在它分发给客户。解释如何更改Flash Player设置可能很困难,因此您可以使用CD来运行服务器,从而绕过安全设置。我在过去曾与Flying Ant server祝你好运。
有一个文档“Controlling access to scripts in a host web page”,它描述了允许Flash内容与Javascript交互的各种方式和限制。
根据文档,只要您的embed标签包含AllowScriptAccess设置为“always”,无论页面从哪里加载,您都应该没问题。
啊它说,如果'allowScriptAccess =“always”',域名无所谓,但在此之前它说:“对于本地运行的SWF文件,只有在SWF文件和包含网页(如果存在一个)位于受信任的本地安全沙箱中,如果内容位于本地网络或本地文件系统沙箱中,则对这些方法的调用将失败。所以我不认为这是可能的。 – erikvold
对不起,我做了我的问题更加清晰,我不希望用户必须改变他们的全球闪光灯设置。 – erikvold
然后运行本地服务器,就像我上面所描述的那样,是唯一的出路。 –
P.S.或者以嵌入Flash的HTML/JS AIR应用程序的形式发布,但必须由用户安装。 –