:::: 菜单 ::::

httpService读XML发生Security error accessing url

Flex中用httpService读取不同域的XML(如http://xml.weather.yahoo.com/forecastrss),会发生Security error accessing url错误. 不过在调试文件夹(默认bin-debug)下却可以正常读取. 这个情况很讨厌.相信不少人被这个安全问题困扰。

为什么仅在调试文件夹下可以呢? 原来,bin-debug文件夹下能用仅仅是因为[系统盘]:Documents and Settings[用户名]Application DataMacromediaFlash Player#SecurityFlashPlayerTrustflexbuilder.cfg里面自动设置了可信,实际运行时是安全禁止的。也就是说我们需要做的就是解决安全禁止的问题。

那么,如何解决呢?
有位兄弟(iknowkungfoo)也遇到这个问题“Security error accessing url” problem with Flex SWF 他查阅了官方文档,发现解决方法:

由于安全问题,客户端应用仅在满足三个条件之一时可以访问远程数据:

  1. 编译的SWF文件与远程数据源在同一域
  2. 使用代理,SWF文件在代理的相同服务器上
  3. 在远程主机放置跨域文件

而这位兄弟懒得去捣鼓跨域文件,因此他宁愿让SWF文件的链接与数据源在同一域,满足了第一条。

而我们往往都是希望使用别的网站提供API完成某功能才遇到这个安全状况(比如雅虎天气),因此我们无法把SWF文件放到远程数据源的同一域上以满足第一条条件。但我们可以创造第一条件来达到目的:在自己的网站上做一个动态网页去yahoo获取天气,然后用swf读取自己这个动态网页的结果(个人推荐)。

还有个方法,使用代理,这个没搞过,我感觉有点复杂,要写个proxy-config.xml。详细参考: Flex3.0调用webservice,没有任何反应(csdn)Flex跨網域存取XML – Flex Proxy Service

最后,必杀招:如果有能量(強大的交涉手腕),与Yahoo联系一下,在他们网站上放个跨域文件,万事OK。

延伸阅读


  1. Good!
    Yahoo! 提供了这个天气API, 应该说已经允许任何域访问的了。
    BTW, 鼠标的空间在哪买的? 🙂