[Android Tip] WebView document.referrer 为空

今天售后反馈了一个问题,客户的一个适配过移动端的网站登陆界面在Android客户端会重复刷新,具体表现为输入用户名和密码点击登陆后,登陆成功却没有跳转到之前的界面,而是刷新了一下登陆界面。

既然问题是登陆之后,那就看看网站login的相关逻辑:

$('#loginbtn').click(function(){
        var username = $('#username').val();
        var pwd = $('#userpwd').val();
        var client = 'wap';
        if($.sValid()){
              $.ajax({
                type:'post',
                url:ApiUrl+"/index.php?act=login",  
                data:{username:username,password:pwd,client:client},
                dataType:'json',
                success:function(result){
                    if(!result.datas.error){
                        if(typeof(result.datas.key)=='undefined'){
                            return false;
                        }else{
                            addcookie('username',result.datas.username);
                            addcookie('key',result.datas.key);
                            location.href = referurl;
                        }
                        $(".error-tips").hide();
                    }else{
                        $(".error-tips").html(result.datas.error).show();
                    }
                }
             });  
        }
    });

可以看到登陆成功后有这样一个动作:

location.href = referurl;

看样子登陆成功后网页跳转到了referurl指向的url,随后找到了referurl的赋值语句:

var referurl = document.referrer;

这里应该就是问题的关键了,连上手机,打开Chrome://inspect,console输出了一下document.referrer的值却发现是空的,怪不得页面会刷新。但是网页在Chrome的Device mode下却是正常的,document.referrer的值也不为空。试着用QQ内部浏览器打开网址,相关的操作也都正常,看来是自己的代码有问题。

Google了一下document.referrer为空的相关信息又看了看自己的代码,感觉问题应该是出在了这里(shouldOverrideUrlLoading):

webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

        });

如果对url跳转没有特殊处理的话,其实可以不用view.loadUrl(url)。将上面的代码改成:

webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

        });

就可以了。

至此,document.referrer不为空,网站也能正常登陆。WebView的loadUrl()这个方法没有再详细研究,不过以后要看情况使用了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果在 Android WebView 中加载 index.html 文件时出现缓存找不到的问题,可能有以下几种原因和解决方法: 1. 确保 index.html 文件已经被正确地缓存到了设备的缓存目录中。你可以检查缓存目录是否存在该文件。 2. 如果使用了 AppCache,确保 manifest.appcache 文件中已经正确地列出了 index.html 文件。检查 manifest.appcache 文件的路径和内容是否正确。 3. 确保在加载 index.html 文件之前,WebView 的缓存模式已经正确设置。可以使用 `setCacheMode` 方法将缓存模式设置为 `LOAD_CACHE_ELSE_NETWORK`,以确保优先加载缓存。 ```java webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ``` 4. 如果 index.html 文件位于 assets 目录下,而不是设备的缓存目录中,你需要使用 `loadUrl` 方法加载 assets 文件。示例代码如下: ```java webView.loadUrl("file:///android_asset/index.html"); ``` 5. 如果 index.html 文件位于设备的缓存目录中,你需要构建正确的文件路径并使用 `loadUrl` 方法加载该文件。示例代码如下: ```java String cachePath = getApplicationContext().getCacheDir().getAbsolutePath(); String indexPath = "file://" + cachePath + "/index.html"; webView.loadUrl(indexPath); ``` 通过以上方法,你可以检查并确保正确地加载和缓存 index.html 文件。如果问题仍然存在,请检查文件路径和缓存操作是否正确,并确保文件在指定的位置可访问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值