解决Flex程序在chrome,safari,IE9等浏览器中history的后退与前进问题

  chrome,safari,IE9等最新的浏览器在运行Flex程序时当你点history的后退与前进按钮,Flex程序是不会切换页面的。这个是很久以前就发现的一个问题(SDK 4.1也有这个问题),终于在今天纠结一天后得已over。

  想必这应该是Flex BrowserManager的问题。当对BrowserManager中所有的方法进行测试后发现,当用BrowserManager的setFragment方法对某个URL中#后的内容修改后,会使BrowserChangeEvent监听失效或者这样修改后的URL未被这些浏览器当成一个请求式URL保存在history中(当然它也已存在history中)。
  那么我们就不调用BrowserManager的setFragment方法,而是用navigateToURL进行URLRequest,这样就可以避免上述两种可能出错的地方。方法如下:
 
1、还是在application中对BrowserManager加BrowserChangeEvent.URL_CHANGE监听
...
private const bm:IBrowserManager = BrowserManager.getInstance();
private function init():void{
bm.addEventListener(BrowserChangeEvent.URL_CHANGE, ...);
bm.initForHistoryManager();
}
...
 
2、自定义一个类用来部分代理BrowserManager类(可以更好地对BrowserManager类进行修改和扩展)
class{
...
public function setFragment(f:String):void {
var base:String = EncodeURI(BrowserManager.getInstance().base);
if(base.indexOf("#") == -1) base += "#";
navigateToURL(new URLRequest(base + f), "_self");
//不要使用BrowserManager.getInstance().setFragment(f);
}
public function setTitle(t:String):void {
BrowserManager.getInstance().setTitle(t);
}
...
}
 
P.S. 这样做虽然能解决Flex程序在最新的浏览器前进后退的问题,但是这毕竟是“补丁式”的解决方案;而且这个问题本不应该让我们来纠结,而是Adobe自己对BrowserManager进行修改和优化。我想SDK到了Hero版时应该没有这个问题了,本人在此期待一下……

转载于:https://www.cnblogs.com/bmate/archive/2010/11/03/1868209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值