goback_goback用法 - CSDN
  • Android WebView 因重定向无法正常goBack()解决方案  首先说下问题,初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/), B页面重定向到C页面(http://xxx.com.cn/website/index.html) 当调用webview.go...

    Android WebView 因重定向无法正常goBack()解决方案


     首先说下问题,初始页面为A,点击某个链接跳转到B(http://xxx.com.cn/), B页面重定向到C页面(http://xxx.com.cn/website/index.html)

    当调用webview.goBack()时,页面回退到B,然后接着会重定向回C页面.


    这样会导致两个问题:

    1. 无法回退到webview的初始页面A

    2. 无法正常退出Activity或者Fragment(只有还未加载完C时进行回退才能退出页面)


    关于如何解决这个问题,我总结了如下三种方法,可以根据具体情况进行使用:

    一. 首先需要和前端开发人员沟通,看重定向是否必要,如果跳转链接只是域名,然后默认重定向到  域名/index.html,并没有特殊处理的话,那么这种重定向并没有意义.

    只要将网页中的连接,比如

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. <a href="http://xxx.com.cn"/>  

    直接替换为

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. <a href="http:///xxx.com.cn/index.html"/>  

    即可解决该问题.


    二.页面中的重定向是必须的,那么我们就需要自己维护一个webview的历史栈,根据自己的需求进行过滤跳转或者重新加载页面:

    判断到当前为重定向后的链接,那么那么当回退的时候就需要忽略上一级的链接,不使用webview.goback(),移除重定向和重定向后的url,

    获取到初始页面链接后自己进行loadUrl()操作.


    3.还有一种方法,和方法2类似,需要自己维护webview的历史栈,但是需要前端的配合,提供js函数获取网页是否进行重定向

    在webviewClient回调shouldoverloading()中过滤url时,若属于重定向的地址,则不加入栈中,回退时根据历史栈加载即可.


    这里主要讲一下方法二:

    首先定义一个历史栈 :

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. private ArrayList<String> loadHistoryUrls = new ArrayList<String>();  

    把初始页面Url加入

    [html] view plaincopy在CODE上查看代码片派生到我的代码片
    1. loadHistoryUrls.add(INITAL_WEB_URL);  

    然后加入加载的url:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. public boolean shouldOverrideUrlLoading(WebView view,String url){  
    2.   
    3.         //将过滤到的url加入历史栈中  
    4.           loadHistoryUrls.add(url);  
    5.           return true;            
    6.   
    7.        }  

    最后在webview.goback()处理:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. @Override  
    2.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
    3.         //判断是否可以返回操作  
    4.         if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {  
    5.            //过滤是否为重定向后的链接    
    6.            if(loadHistoryUrls.size()>0&&loadUrls.get(loadHistoryUrls.size()-1).contains("index.html"))  
    7.   
    8.              //移除加载栈中的最后两个链接  
    9.              loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size()-1));  
    10.   
    11.              loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size()-1));  
    12.   
    13.              //加载重定向之前的页  
    14.              webview.load(loadUrls.get(loadHistoryUrls.size()-1));  
    15.    
    16.             return true;  
    17.             }   
    18.             
    19.         }          
    20.   }  


    关于加载栈,后来发现webview本身也有对应的API:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. //获取历史列表  
    2.  WebBackForwardList mWebBackForwardList = webView.copyBackForwardList();  

    不过这个api可能受系统版本的影响或者不同手机系统进行了修改

    所以解决该问题时,大家可以自己根据需求,自己维护加载的历史栈或者直接调用系统api.


    这里总结一下,若重定向非必要,采取方案一,最简单,修改量也非常小. 重定向必要,则使用方案二或者方案三.

    因为需要和前端人员交互,方案三所需要的沟通,开发,维护的成本要比方案二高出不少,但对于是否重定向的判断非常准确,若有多个重定向的情况,一次开发完成后不需要对代码再次改动.  方案二则需要写死需要过滤的url,若出现多个重定向,则会显得代码比较臃肿,每次都需要重新增加代码. 具体使用依据项目中的开发情况而定.


    转载请声明出处: http://blog.csdn.net/t12x3456

    展开全文
  • Goback()方法功能:返回上一级界面,通过判断popViewControllerAnimated类型是否为空,来判断是present还是pop出来,然后直接做了releaseSelf操作; - (void)goBack { IDSLOG(@"self: %@, parent: %@", self, [self...
    Goback()方法功能:返回上一级界面,通过判断 popViewControllerAnimated 类型是否为空,来判断是present还是pop出来,然后直接做了releaseSelf操作;

    - (void)goBack
    {
       
    IDSLOG(@"self: %@, parent: %@", self, [self parentViewController]);
       
       
    id page = [self presentingViewController];
       
    IDSLOG(@"presenting page: %@", page);
       
        id vc = [self.navigationController popViewControllerAnimated:YES];
        IDSLOG(@"pop the = %@", vc);
        if (nil == vc) {
            [
    self dismissViewControllerAnimated:YES completion:^{
               
            }];
        }
       
        [
    self releaseSelf];
    }
     
    releaseSelf()方法功能:用来释放通知内存,和Goback()方法结合,以防忘记释放默认通知;

    - (void)releaseSelf
    {
       
    //sub class implements.
       
       
    IDSLOG(@"self: %@", self);
       
        [[
    NSNotificationCenter defaultCenter] removeObserver:self];
    }
     


    PS:在每个文件前面要加这两句释放内存的语句

    - (
    void)dealloc
    {
       
    IDSLOG(@"dealloc - IDSGameRoomHomePage");
    }


    - (
    void)releaseSelf
    {
        [
    super releaseSelf];
    }
     
    二、我的想法
     
     
    Goback这种方法,使用起来很便捷,又注意了内存泄漏,之前写的时候,每次都要对应Push 或者 present 来写返回操作,现在一个 [self goback] 就搞定了,我觉得这是一个比较便捷又不容易出问题的好方法。
     
    三、思考与行动
     
    1.Goback方法这样写会不会存在问题?如果有,是否思考过更好的解决办法?
     
    2.releaseSelf 和 dealloc 有啥区别?为什么有dealloc还需要releaseSelf方法?合成一个方法的弊端在哪里?


     

    转载于:https://www.cnblogs.com/firstrate/p/7134516.html

    展开全文
  • 作者:ahuo 很多朋友在卸装诺顿2006时都出现了卸装失败后,使诺顿GOBACK不能被卸装...GOBACK在安装的时候会在硬盘的最后一个分区里划7.8M的磁盘空间,状态是隐藏的,作为GOBACK的程序存储空间(就是开机时看到的那...

      作者:ahuo

    很多朋友在卸装诺顿2006时都出现了卸装失败后,使诺顿GOBACK不能被卸装,搞到分区也不能被识别。我也遇到过这样的问题。现在开始向大家介绍一些关于卸装诺顿GOBACK以及善后的方法。

    1、            GOBACK的运行的情况

    GOBACK在安装的时候会在硬盘的最后一个分区里划7.8M的磁盘空间,状态是隐藏的,作为GOBACK的程序存储空间(就是开机时看到的那个程序)。在GOBACK启用的状态下很多分区软件都不能正确识别硬盘的分区。这也是可怕之处,由于GOBACK直接对硬盘操作,在没有完全卸装的情况下重装系统也是无济于事的。GOBACK仍然可以正常工作。它的启动顺序是先访问那个GOBACK所在的分区,再进行正常的启动的。

    2、            比较幸运的情况

    就是你还没有卸装并且没设置GOBACK的密码或忘记了密码。出现过这样的情况,就是你明明没有设置密码,可是它却问你密码(这是下面的坏情况)。 这样的话就处理起来比较方便,首先你禁用GOBACK的还原功能。重启后分区软件可以正常识别分区。看上去也没什么大的问题。这时你可以在系统里对GOBACK进行删除了。可是它所占的分区是不会还原的,也就是说已经分出去了。(这个情况在使用一键还原的时候同样会出现,就是卸装了,可是所占分区不能还原)文章的下面会有解决的方法。

        3   最坏的情况

    卸载的时候只卸载掉了一部分,中途出现错误,在添加/删除程序里边还可以找到GOBACK,开机的时候也有提示,就是删不掉。我也是遇到这种情况。可能是从网上下载的缘故(版本有问题)。也有忘记密码等情况。

    这个时候如果还能在开机的时候把GOBACK禁用的话问题也不大了m.jpg
    怎么这里贴图这么麻烦。

    。要是不行的话,就要有心理准备啦!由于GOBACK对分区表作了修改或保护,一般的分区软件不能识别硬盘的分区。

    pgno.jpg

    这时需要一些工具来帮忙了。

    先用分区表修理工具DISKFIX,它会把你原来的硬盘分区识别出来,经过一个个的识别后就可以保存并重启。

    f1.jpg

     

    重启后就没问题了。分区已经可以被识别了。

    同时也看到最后那个分区(7.8M的)这个就是GOBACK的所占分区

     p1.jpg

    确定修复


    p2.jpg 

    把那个7.8M的分区删除,这个时候就可以说GOBACK被删除了。

     

    到了这一步你的硬盘也就正常了。也可重装系统了。

    如果你还想把那7.8M的空要回来的话,就往下看吧。

    4、GOBACK善后工作

    使用工具DISK GEN(在进行下面的操作前,请备份分区表,以防万一)

    1d.JPG


     

    大家可以看到终止那一栏的最下面柱面是520,上一个是509。修改上面的分区参数,把终止柱面改为520就可把那个分区合并了,然后再删除GOBACK的分区。最后保存退出,重启后一切正常。

    2d.jpg
    3dd.jpg

     

    转载于:https://www.cnblogs.com/ahuo/archive/2006/10/15/529484.html

    展开全文
  • 需求:2个页面,list 和 update,从 list 进入 update操作完成后返回到 list 页面,并触发 list 页面的刷新。...从 list 进入 update时先传递一个callback函数作为参数update在goback前 调用callba...
        

    需求:2个页面,list 和 update,从 list 进入 update操作完成后返回到 list 页面,并触发 list 页面的刷新。

    方案如下:

    一、navigate 中 传递一个callback函数作为参数

    从 list 进入 update时先传递一个callback函数作为参数
    update在goback前 调用callback方法,在callback里面刷新list页面。

    比如在 list 跳转到 update 时携带一个参数去下个页面

    navigate('update ',{  callback: (data)=>{ console.log(data); // 打印值为:'回调参数' } });

    在 update 页面 goback 之前,取到并回传参数,这样回传参数会重走 render 方法。

    const {navigate,goBack,state} = this.props.navigation; 
    state.params.callback('回调参数');
    goBack();

    延伸问题: 跨多级页面返回要如何处理?

    二、利用 DeviceEventEmitter 通知

    在 list componentDidMount方法中注册监听事件

    DeviceEventEmitter.addListener('BackTo', (dic) => {
        // 接收到 update 页发送的通知,后进行的操作内容
     console.log('BackTo', dic)
    });

    在 update 页 componentWillUnmount 方法中触发监听事件

    DeviceEventEmitter.emit('BackTo',{name: 'back'});

    延伸问题: 返回时可能触发多次事件,遇到过返回时触发了6次事件

    展开全文
  • 安装 history npm install history --save-dev 在state里面请求 history,并实例化 this.state = { history: require("history").createHashHistory, }; 给图片(按钮)添加点击...div className="goback">...
    1. 安装 history
      npm install history --save-dev
    2. 在state里面请求 history,并实例化
    this.state = {
                history: require("history").createHashHistory,
            };
    
    1. 给图片(按钮)添加点击事件
    <div className="goback">
              <img onClick={this.goback} src={require("../../assets/image/back.45314cf585ebb232852fa9c3f3db721d.png")} alt="" />
              <span></span>
    </div>
    
    1. 点击事件里面实现后退
    goback = () => {
            this.state.history().goBack();
        }
    
    展开全文
  • 在Android中,使用Webview 添加网页, 随着用户点击深入内部网页之后,想返回上一页,就得使用webview.goback()方法。而这个时候,如果上一个页面有重定向跳转,用户将无法退回 解决方案: mWebView= (WebView)...
  • go(-1): 返回上一页,原页面表单中的内容会丢失; history.go(-1):后退+刷新; history.go(1) :前进 back(): 返回上一页,原页表表单中的内容会保留; history.back():后退 ; history.back(0) 刷新; history.back...
  • goBack 首先, 现在看一下react navigation官网中对goBack的描述: goBack的参数为页面的key, 这个key是系统随机分配的, 而不是手动设置的routeName, 所以参数填routeName无法跳转, goBack如果不带参数(即key为...
  • 最近有很多人问我为什么webview加载一个网页,执行了goback网页不能返回的问题,我特此来为那些有问题的或者说有遇到这个问题不知道怎么下手解决的,可以看看下面的解答,或许会对你有所帮助吧。 2.问题原因 ...
  • react中使用router.push("/createForm")进行路由跳转,表单创建完成后,使用router.goBack()返回页面。 创建页面可以正常返回列表页面,但是编辑页面需要调用两次router.goBack()才可以返回列表页面。 编辑页面和...
  • 问题描述最近有很多人问我为什么webview加载一个网页,执行了goback网页不能返回的问题,我特此来为那些有问题的或者说有遇到这个问题不知道怎么下手解决的,可以看看下面的解答,或许会对你有所帮助吧。2.问题原因...
  • WKWebView goBack执行无效是bug?可能只是我们对官方文档的说明还不是很明确吧。 这个算是bug? 这样处理,代码如下: if (self.webView.canGoBack ) { [self.webView goBack]; } else { //Coding... } 在...
  • 背景: 在做项目时使用React-Navigation进行页面管理。有两个需求 ... 2:从当前的通讯录中的一个页面跳转到我的中的一个子页面,但是当点击这个子页面的返回键...一:goBack返回到指定页面 分析: 在React-Navigation...
  • 问题:最近项目中遇到WebView在重定向时GOBACK不好用了!我在webview进行表单提交后,返回列表显示提交成功,GOBACK后又进入了死循环.... 分析:URLx--》URLa --》 URLb--》表单提交(重定向) --》URLa 根据需求,这...
  • 前两天遇到这个问题,却一直没时间写博客,为了防止别人再入坑,还是...唯独民生银行这个界面点击后跳转后,点返回键是走的goback,却在不停的刷新民生银行的界面怎么都返不回,一直点击了三十多次还在刷新民生银行...
  • the key property for goBack() is a dynamically created string, created by react-navigationwhenever navigate to a new route.goBack()参数key为react-navigation动态分配的,而不是指定的routeName,所以当在...
  • Android Webview 重定向 goback 中级方法
  • 如题,安装linux系统的时候...go back to the menu and correct this problem  返回菜单和纠正这个问题  the partition table format in use on your disks normally requires you to create a separate partitio
  • 用户场景: 用户操作某一功能时,提示去登陆页面,从登陆页面跳到快速登录或者注册页面,快速登录或者注册完,需要跳回到用户原来操作浏览的页面利用goback返回多个页面登陆页面_gotoScreen(screenName,params){ ...
  • $ionicHistory 用一个栈 来存储用户的浏览记录(视图、页面 )。 $ionicHistory.goBack(-1); 当前视图出栈。 $state.go("app.main"); 将app.main视图入栈。 比如转账功能。 账...
1 2 3 4 5 ... 20
收藏数 130,468
精华内容 52,187
关键字:

goback