不可见的 Flash:通过使用不可见的 Flash Player 增强 Web 应用程序
2010-07-09 00:00:00 来源:WEB开发网跨域 Ajax
Ajax 目前在 Web 应用程序中无所不在;它是任何 Web 应用程序中都假设会有的部分。Ajax 的一个主要不足就是为人诟病的同源策略。如果 Web 页面由 a.com 提供,您只能向 a.com 调用 Ajax(更精确地说是 XMLHttpRequest)。例如,您无法调用 b.com。如果您的公司拥有 a.com 和 b.com,那就没有影响;浏览器不会关心这些。但是对 Flash 应用程序却不是这样。
Flash 应用程序可以获得许可,并对提供服务的域以外的域进行调用。这可以用跨域策略文件完成。默认情况下,Flash 运行时将在服务器的文档根目录搜索策略文件:http://<your domain>/crossdomain.xml。例如,清单 4 是 Twitter 搜索域的策略文件,http://search.twitter.com/crossdomain.xml。
清单 4. Twitter 搜索域的策略文件
<!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>
这是个相当好的策略文件。它允许所有(如 “*” 通配符所示)域对 SWF 进行访问。因此所有 Flash 应用程序都可以调用 Twitter 的搜索 API。在大多数具有公共 API 的 Web 网站上像这样的策略文件很常见。尽管如此,有些网站使用更加严格的策略,只允许自己所有的其他域或合作伙伴的域进行访问。有了策略文件,就可以细粒度地精确控制谁能够调用服务器,谁不能。看看如何将同样的功能扩展到 Ajax 应用程序中。
跨域
如果您的应用程序只需要调用特定的域,可以编写 ActionScript 代码调用该域,然后在应用程序中使用 ExternalInterface 将其公开给 JavaScript。然而,我将采取一种更好的方法,并试图用更一般化的方式进行公开。因此,清单 5 中,将使用一个实用类从 ActionScript 中调用任意域。
更多精彩
赞助商链接