经过WebView翻开网页时,WebView会在恳求头中主动添加x-requested-with字段,字段值为应用的包名。 本文介绍怎么修正x-requested-with的值。

查看恳求头

为了便利调试,能够运用Chrome Inspect工具来调试WebView加载的网页。

  • 装备WebView敞开调试形式,代码如下:
WebView.setWebContentsDebuggingEnabled(true)
  • 手机敞开开发者形式,衔接电脑,运用Chrome浏览器或Edge浏览器,翻开Inspect网页。
// Chrome 浏览器
chrome://inspect/#devices
// Edge 浏览器
edge://inspect/#devices
  • 挑选想要调试的网页,点击inspect。
Android  WebView修改Headers中的x-requested-with
  • 在翻开的Inspect窗口中点击网络查看恳求头 。

Android  WebView修改Headers中的x-requested-with

修正x-requested-with

  • 经过loadUrl修正

在加载网页时,装备恳求头进行修正,代码如下:

webview.loadUrl("https:///", mapOf(Pair("x-requested-with", "")))

效果如图:

经过loadUrl加载的链接

Android  WebView修改Headers中的x-requested-with

链接网页内部的其他恳求

Android  WebView修改Headers中的x-requested-with

能够看到,此方法只对经过loadUrl加载的链接收效,链接网页内部其他恳求的x-requested-with没有被修正。

  • 经过获取包名方法修正

找到另一个解决方案,在Application找到WebView获取包名的方法,修正返回值,代码如下:

class ExampleApplication : Application() {
    override fun getPackageName(): String {
        try {
            val stackTrace = Thread.currentThread().stackTrace
            for (item in stackTrace) {
                if ("org.chromium.base.BuildInfo".equals(item.className, true)) {
                    if ("getAll".equals(item.methodName, true)) {
                        return ""
                    }
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return super.getPackageName()
    }
}
// 在manifest中装备自定义的application
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application
        android:name=".base.ExampleApplication"
        .../>
</manifest>

效果如图:

Android  WebView修改Headers中的x-requested-with
Android  WebView修改Headers中的x-requested-with

经过这种方法,所有恳求的x-requested-with都会被修正。