微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

返回后 WebView 引用器 (HTTP_REFERER) 标头不起作用

如何解决返回后 WebView 引用器 (HTTP_REFERER) 标头不起作用

我试图通过覆盖 A.PHP 的 shouldOverrideUrlLoading 来在 Android WebView 中定义 HTTP_REFERER:

        @Override
        public boolean shouldOverrideUrlLoading(WebView view,String url) {  // click link
            Map<String,String> headers = new HashMap<>();
            headers.put("Referer","http://192.168.1.103/ecity/A.PHP?idx_t=cpn"); // for PHP $_SERVER['HTTP_REFERER']
            view.loadUrl(url,headers);  
            return true;
        }

A.PHP 中有一个链接到 B.PHP。如果我从 A.PHP 直接转到 B.PHP,我可以在链接的 B.PHP 文件中检索此 $_SERVER['HTTP_REFERER'] 没有任何问题。但是当我单击其他链接并返回上一页时,此引用标题不再有效。例如在 A.PHP(点击链接)--> 进入 C.PHP(点击返回按钮)--> 回到 A.PHP(点击 B 链接)-> 进入 B.PHP;那么这次B.PHP没有定义$_SERVER['HTTP_REFERER']。

我尝试拦截请求如下。但这无济于事。

       @Override
        public WebResourceResponse shouldInterceptRequest(WebView view,WebResourceRequest request) {
            String url = null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                url = request.getUrl().toString();
                if (url.contains("A.PHP")) {
                    request.getRequestHeaders().put("Referer","http://192.168.1.103/ecity/A.PHP?idx_t=cpn");
                }
            }
            return super.shouldInterceptRequest(view,request);
        } 

在 webView 设置中,我包含了这两行:

   ...
   webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
   webView.getSettings().setBlockNetworkLoads (false);
   ...

按下回退键时如何解决这个referer问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。