兩种方法解決:
1.被调用数据端服务器使用策略文件。
*策略文件 crossdomain.xml 内容如下:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
将策略文件放置在被调用数据端服务器的根目录下。
domain="*" 为被允许连接的域(子域)。
*如果策略文件为非默认目录(服务器根目录),动作脚本可以使用 System.security.loadPolicyFile 向 Flash Player 通知非默认的策略文件位置。例如:
System.security.loadPolicyFile("http://foo.com/sub/dir/pf.xml");
这会导致 Flash Player 从该指定的 URL 中检索策略文件。由这一位置的策略文件授予的权限将应用于该服务器的虚拟目录分层结构中同一层及以下各层中的所有内容。
所以,续上例,以下几项成立:
允许 loadVariables("http://foo.com/sub/dir/vars.txt")
允许 loadVariables("http://foo.com/sub/dir/deep/vars2.txt")
不允许 loadVariables("http://foo.com/elsewhere/vars3.txt")
*一种新的语法允许直接从 XMLSocket 服务器中检索策略文件:
System.security.loadPolicyFile("xmlsocket://foo.com:414");
Flash Player 将会尝试从该指定的主机和端口中检索策略文件。可使用任何端口,而不仅限于 1024 及以上的端口。
*由 XMLSocket 服务器提供的策略文件使用与其他任何策略文件都相同的语法,唯一不同之处是它还必须指定授予对哪些端口的访问权。当一个策略文件来自低于 1024 的某一端口时,它可以授予对任何端口的访问权;当一个策略文件来自 1024 或更高的端口时,它只能授予对 1024 及更高端口的访问权。允许的端口在 <allow-access-from> 标记中的“to-ports”属性中指定。允许单个的端口号、端口范围和通配符。下面是 XMLSocket 策略文件的示例:
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.foo.com" to-ports="507,516" />
<allow-access-from domain="*.bar.com" to-ports="516-523" />
<allow-access-from domain="www.foo.com" to-ports="507,516-523" />
<allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>
自旧的默认位置 — 端口 80 上的一个 HTTP 服务器上的 /crossdomain.xml - 获得的策略文件隐式授予对 1024 及以上所有端口的访问权。无法从 HTTP 服务器上的任何其他位置检索一个策略文件来对 XMLSocket 操作授权;XMLSocket 策略文件的任何自定义位置都必须在 XMLSocket 服务器上。
因为连接到低于 1024 的端口的这一能力是新增的,所以对连接进行授权总需要用 loadPolicyFile 加载的一个策略文件,即使在影片连接到自己的子域时也是如此。
2.Web脚本代理 (Server-side proxy method):
*ColdFusion | PHP | ASP | JSP
以上 脚本文件 必须和 Flash 放在同一个域的URL中才能正常使用。
将 脚本文件 中的URL换成你自己的URL,然后在用 Flash 来调用。