SWF关于远程源和允许跨域数据加载
SWF关于远程源和允许跨域数据加载
与 HTML 页面类似,SWF 文件是用于捕获和显示信息的窗口。然而,SWF 文件可以在浏览器中保持加载状态,同时用新信息持续更新而不必重新加载整个页面。使用动作脚本函数和方法,可以向服务器端脚本、文本文件以及 XML 文件发送信息,也可从它们那里接收信息。
此外,服务器端脚本可从数据库中请求特定信息,然后将其转发给 SWF 文件。可用多种不同的语言撰写服务器端脚本:其中最常用的是 CFML、Perl、ASP (Microsoft Active Server Pages) 和 PHP。通过在数据库中存储信息和从其中检索信息。
许多动作脚本函数和方法可用于将信息传入 SWF 文件和从 SWF 文件传出信息。每个函数或方法使用一个协议来传输信息,并要求信息以一定的方式格式化。
Flash 文档可以使用以下数据加载调用之一从外部源加载数据:XML.load()、XML.sendAndLoad()、LoadVars.load()、LoadVars.sendAndLoad()、loadVariables()、loadVariablesNum()、MovieClip.loadVariables()、XMLSocket.connect() 和 Macromedia Flash Remoting (NetServices.createGatewayConnection)。
另外,SWF 文件可以在运行时导入运行时共享库或另一个 SWF 文件中定义的资源。默认情况下,数据或 SWF 媒体(运行时共享库的情况)必须与加载该外部数据或媒体的 SWF 驻留在同一个域中。
若要使运行时共享库中的数据和资源可用于其它域中的 SWF 文件,可以使用跨域策略文件。跨域策略文件是一个 XML 文件。
当 Flash 文档试图访问另一个域中的数据时,Flash Player 自动尝试从该域加载策略文件。如果尝试访问数据的 Flash 文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。
策略文件必须具有名称 crossdomain.xml 并驻留在提供数据的服务器的根目录中。只有在通过 HTTP、HTTPS 或 FTP 进行通讯的服务器上,策略文件才起作用。策略文件特定于所在服务器的端口和协议。
如果您指定了一个 IP 地址,则将只向使用 IP 语法从该 IP 地址(例如 http://65.57.83.12/flashmovie.swf)加载的 SWF 文件授予访问权限,而不向使用域名语法加载的那些 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。
以下是一个策略文件的示例,假设该策略文件位于 scile.com 上,则来自 foo.com、 friendOfFoo.com、*.foo.com 和 105.216.0.40 上的 Flash 文档便可以访问scile.com上的数据:
<?xml version="1.0"?>
<!-- http://www.foo.com/crossdomain.xml -->
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com" />
<allow-access-from domain="*.foo.com" />
<allow-access-from domain="105.216.0.40" />
</cross-domain-policy>
这样使得flash可以很方便的发送和加载外部数据了。对于数据的发送和加载我们一般采用LoadVars 类中的LoadVars.sendAndLoad()、XML 类中的XML.sendAndLoad()以及Macromedia Flash Remoting ,这之中Remoting 是需要额外安装软件支持的,所以在一般情况下使用LoadVars 类和XML 类会比较多一些,当然Remoting 也有自己的优点。
LoadVars 类中的LoadVars.sendAndLoad()合适发送和接收少量简单数据,而XML 类中的XML.sendAndLoad()则合适发送和接收大量复杂数据。配合使用完全可以让flash做出交互数据库的全动态网站。
作者:scile 来源:scileblog
此外,服务器端脚本可从数据库中请求特定信息,然后将其转发给 SWF 文件。可用多种不同的语言撰写服务器端脚本:其中最常用的是 CFML、Perl、ASP (Microsoft Active Server Pages) 和 PHP。通过在数据库中存储信息和从其中检索信息。
许多动作脚本函数和方法可用于将信息传入 SWF 文件和从 SWF 文件传出信息。每个函数或方法使用一个协议来传输信息,并要求信息以一定的方式格式化。
Flash 文档可以使用以下数据加载调用之一从外部源加载数据:XML.load()、XML.sendAndLoad()、LoadVars.load()、LoadVars.sendAndLoad()、loadVariables()、loadVariablesNum()、MovieClip.loadVariables()、XMLSocket.connect() 和 Macromedia Flash Remoting (NetServices.createGatewayConnection)。
另外,SWF 文件可以在运行时导入运行时共享库或另一个 SWF 文件中定义的资源。默认情况下,数据或 SWF 媒体(运行时共享库的情况)必须与加载该外部数据或媒体的 SWF 驻留在同一个域中。
若要使运行时共享库中的数据和资源可用于其它域中的 SWF 文件,可以使用跨域策略文件。跨域策略文件是一个 XML 文件。
当 Flash 文档试图访问另一个域中的数据时,Flash Player 自动尝试从该域加载策略文件。如果尝试访问数据的 Flash 文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。
策略文件必须具有名称 crossdomain.xml 并驻留在提供数据的服务器的根目录中。只有在通过 HTTP、HTTPS 或 FTP 进行通讯的服务器上,策略文件才起作用。策略文件特定于所在服务器的端口和协议。
如果您指定了一个 IP 地址,则将只向使用 IP 语法从该 IP 地址(例如 http://65.57.83.12/flashmovie.swf)加载的 SWF 文件授予访问权限,而不向使用域名语法加载的那些 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。
以下是一个策略文件的示例,假设该策略文件位于 scile.com 上,则来自 foo.com、 friendOfFoo.com、*.foo.com 和 105.216.0.40 上的 Flash 文档便可以访问scile.com上的数据:
这样使得flash可以很方便的发送和加载外部数据了。对于数据的发送和加载我们一般采用LoadVars 类中的LoadVars.sendAndLoad()、XML 类中的XML.sendAndLoad()以及Macromedia Flash Remoting ,这之中Remoting 是需要额外安装软件支持的,所以在一般情况下使用LoadVars 类和XML 类会比较多一些,当然Remoting 也有自己的优点。
LoadVars 类中的LoadVars.sendAndLoad()合适发送和接收少量简单数据,而XML 类中的XML.sendAndLoad()则合适发送和接收大量复杂数据。配合使用完全可以让flash做出交互数据库的全动态网站。
作者:scile 来源:scileblog