控制对主机网页中脚本的访问
通过使用以下 ActionScript 3.0 API 可实现外出脚本访问:
-
flash.system.fscommand()
函数 -
flash.net.navigateToURL()
函数(当指定navigateToURL("javascript: alert('Hello from Flash Player.')"
等脚本访问语句时) -
flash.net.navigateToURL()
函数(当window
参数设置为“_top”
、“_self”
或“_parent”
时) -
ExternalInterface.call()
方法
对于本地运行的 SWF 文件,仅当 SWF 文件和包含该文件的网页(如果存在)位于受信任的本地安全沙箱中时,才能成功调用这些方法。如果内容位于只能与远程内容交互的沙箱或只能与本地文件系统内容交互的沙箱中,则对这些方法的调用将失败。
HTML 代码中用于加载文件的 AllowScriptAccess
参数控制能否从 SWF 文件内执行外出脚本访问。
在 HTML 代码中为承载 SWF 文件的网页设置此参数。可以在 PARAM
或 EMBED
标签中进行设置。
AllowScriptAccess
参数可以有 "always"
、"sameDomain"
和 "never"
这三个可能值中的一个:
- 当
AllowScriptAccess
为“sameDomain”
时,仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问。这是 AVM2 内容的默认值。 - 当
AllowScriptAccess
为“never”
时,外出脚本访问将始终失败。 - 当
AllowScriptAccess
为“always”
时,外出脚本访问将始终成功。
如果未在 HTML 页面中为 SWF 文件指定 AllowScriptAccess
参数,则默认为 AVM2 内容的“sameDomain”
。
下面是一个在 HTML 页面中设置 AllowScriptAccess
标签的示例:
<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'> <param name='AllowScriptAccess' value='never'/> <param name='src' value=''MyMovie.swf'/> <embed name='MyMovie.swf' pluginspage='http://www.adobe.com/go/getflashplayer_cn' src='MyMovie.swf' height='100%' width='100%' AllowScriptAccess='never'/> </object>
AllowScriptAccess
参数可以防止从一个域中承载的 SWF 文件访问来自另一个域的 HTML 页面中的脚本。对从另一个域承载的所有 SWF 文件使用 AllowScriptAccess="never"
可以确保位于 HTML 页面中的脚本的安全性。
有关详细信息,请参阅《ActionScript 3.0 语言和组件参考》 中的以下条目:
-
flash.system.fscommand()
函数 -
flash.net.navigateToURL()
函数 - ExternalInterface 类的
call()
方法