
最近做了个新浪微博的小应用,遇到了不少头疼的问题,主要出在Flash的跨域访问问题上。
应用地址:这里
flash存放在新浪的SAE上,新浪SAE提供php空间,作为新浪app的运行和开发平台。
微博的数据由新浪微博API获得。
应用的数据存储在SAE的mySQL数据库中。
开发过程中出现了这样一些问题:
原本想将flash挂在smallbusiness上的,发现不能访问微博API的数据,存在跨域问题。在网上寻找解决办法,最多的是说在服务器上建立crossdomain.xml文件。该文件是存放在被访问的域名下,而微博API域名下我也没办法去放置这样一个文件。。所以用了另一个方法解决:在SAE上用php做数据中转。于是封装了几个用到的api,在SAE应用域名下建立了自己的crossdomain.xml,这样flash就能获取微博的数据了。
flash读写SAE上数据库的解决办法也是跟上面说的一样。
flash的微博应用本身有个获取授权码的问题,因为没办法callback,一般情况下是需要弹出授权页面,由用户自己手动获得授权码并输入到flash中。而flash弹出的窗口是不被浏览器信任的,很容易被拦截。所以为了绕过这个过程,也为了避免弹出窗口被屏蔽,使用了php页面授权,再加载flash的方式。其中就会在很多个授权页面中进行跳转,详见OAuth授权。
以上这些所有的授权步骤都在smallbusiness的一个页面中完成,用户完全看不到页面跳转的过程,因为使用了一个iframe(目前不知道其他什么办法,iframe似乎也不是很受欢迎),载入的是存在SAE上的php页面。
这其中又出现了一个flash的安全问题,跨域的flash跳转页面当非“_blank”的时候又是不被信任,需要设置allowscriptaccess为always。
至此,在一个静态页面中,flash完成了授权页面的跳转,访问了微博API数据,读写了SAE上的数据库,最终呈现出来。
No comments:
Post a Comment