您可以通过在包含 SWF 内容的 HTML 页中的
<object>
和
<embed>
标签中设置
allowNetworking
参数来控制 SWF 文件访问网络的功能。
allowNetworking
的可能的值为:
-
"all"
(默认值)— 在 SWF 中允许所有的网络 API。
-
"internal"
— SWF 文件可能不调用浏览器导航或浏览器交互 API(在本节后面部分中列出),但是它会调用任何其他网络 API。
-
"none"
— SWF 文件可能不调用浏览器导航或浏览器交互 API(在本节后面部分中列出),并且它无法使用任何 SWF 到 SWF 通信 API(也在本节后面部分中列出)。
allowNetworking
参数主要在 SWF 文件及所在的 HTML 页来自不同的域时使用。当要加载的 SWF 文件与其所在的 HTML 页来自同一个域时,不建议使用
"internal"
或
"none"
值,原因是您不能保证始终同时加载 SWF 文件和想要的 HTML 页。不受信任方可以从您的域中加载未包含在 HTML 中的 SWF 文件,这种情况下,
allowNetworking
限制不会按预期发挥作用。
调用被禁止的 API 会引发 SecurityError 异常。
在包含 SWF 文件引用的 HTML 页的
<object>
和
<embed>
标签中添加
allowNetworking
参数并设置该参数的值,如下面的示例中所示:
<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"
width="600" height="400" ID="test" align="middle">
<param name="allowNetworking" value="none" />
<param name="movie" value="test.swf" />
<param name="bgcolor" value="#333333" />
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"
width="600" height="400"
name="test" align="middle" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
HTML 页也可以使用脚本生成 SWF 嵌入标签。您需要更改脚本以使其插入正确的
allowNetworking
设置。 Adobe Flash Professional 和 Adobe Flash Builder 生成的 HTML 页面使用
AC_FL_RunContent()
函数嵌入对 SWF 文件的引用。向此脚本添加
allowNetworking
参数设置,如下所示:
AC_FL_RunContent( ... "allowNetworking", "none", ...)
当
allowNetworking
设置为
"internal"
时,下列 API 被阻止:
navigateToURL()
、
fscommand()
、
ExternalInterface.call()
当
allowNetworking
设置为
"none"
时,除了上面所列的 API 外,还会禁止下列 API:
sendToURL()
、
FileReference.download()
、
FileReference.upload()
、
Loader.load()
、
LocalConnection.connect()
、
LocalConnection.send()
、
NetConnection.connect()
、
NetStream.play()
、
Security.loadPolicyFile()
、
SharedObject.getLocal()
、
SharedObject.getRemote()
、
Socket.connect()
、
Sound.load()
、
URLLoader.load()
、
URLStream.load()
、
XMLSocket.connect()
即使所选的
allowNetworking
设置允许 SWF 文件使用网络 API,可能仍有其他基于安全沙箱限制的限制(请参阅
安全沙箱
)。
当
allowNetworking
设置为
"none"
时,无法在 TextField 对象
htmlText
属性的
<img>
标签中引用外部媒体(这会引发 SecurityError 异常)。
当
allowNetworking
设置为
"none"
时,在 Flash Professional(而不是 ActionScript)中添加的导入的共享库中的元件在运行时被阻止。