zoukankan      html  css  js  c++  java
  • 解决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版时应该没有这个问题了,本人在此期待一下……
  • 相关阅读:
    javaday19_List接口_Set接口
    01玩转数据结构_04_最基础的动态数据结构:链表
    10 拖拽的对话框_滚动条_放大镜_
    01玩转数据结构_03_栈和队列
    java小技巧
    01玩转数据结构_02_不要小瞧数组
    01玩转数据结构_01_课程介绍
    javaday18_ArrayList
    JZOJ.3777【NOI2015模拟8.17】最短路(shortest)
    JZOJ.5230【NOIP2017模拟8.5】队伍统计
  • 原文地址:https://www.cnblogs.com/bmate/p/1868209.html
Copyright © 2011-2022 走看看