Android 4.4.4 WebView無法添加Referer

谷歌官方issue
https://issuetracker.google.com/issues/36997941
最近在做微信H5支付的時候出現問題,雲測TOP100,在Android 4.4.2 Android4.4.4調用微信支付的時候出現吊不起的情況,顯示提示
“提示商家參數格式有誤”

 HashMap<String, String> map = new HashMap<>();
 map.put("Referer", referer);
 this.loadUrl(url,map);

使用的是如上代碼使用loadUrl方法,排查了一天,解決方法:

if (isKitKat()) {
      this.loadDataWithBaseURL(referer,
          "<script>window.location.href=\"" + url + "\";</script>",
                "text/html", "utf-8", null);
} else {
      this.loadUrl(url,map);
}

但是需要在shouldOverrideUrlLoading中return false,否則可能顯示空白頁或者無限循環加載。

 @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                LogUtil.i("shouldOverrideUrlLoading,url=" + url);

                if (url.startsWith("weixin://wap/pay?")) {
                    LogUtil.i("startsWith=" + url);
                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
//                  UtilsManager.getContext().startActivity(intent);
                    mContext.startActivity(intent);
//                   ((Activity)mContext).finish();
                    return true;
                } else {
                    if (isKitKat()) {
                        //兼容這兩個版本設置referer無效的問題
                        return false;
                    } else {
                        view.loadUrl(url, map);
                        LogUtil.i("loadUrl=" + url);
                    }
                }
                return true;
            }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章