返回后 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 (将#修改为@)