android WebView或WebViewClient在何处向发出请求< link>

xdnvmnnf  于 2023-02-06  发布在  Android
关注(0)|答案(1)|浏览(111)

我正在将html文件加载到WebView中,并希望覆盖WebView对<head>中的样式表**<link><image>**元素的请求,以便可以从计算机加载文件
html中的链接是这样的

<head>
    <link href="../stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
    <svg width="100%" height="100%" viewBox="0 0 352 500>
        <image width="352" height="500" xlink:href="image.jpeg"/>
   </svg>
</body>

我有一个包含此代码的WebViewClient,但它们都没有向这些链接发出请求。shouldInterceptRequest和onLoadResource都只接收request?.url的整个html文件

class EpubWebViewClient(): WebViewClient() {
    override fun onLoadResource(view: WebView?, url: String?) {
        Log.i("loadurl", "onLoadResource $url")
        super.onLoadResource(view, url)
    }
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        Log.i("loadurl", "shouldOverrideUrlLoading ${request?.url}")
        return super.shouldOverrideUrlLoading(view, request)
    }
    override fun shouldInterceptRequest(
        view: WebView?,
        request: WebResourceRequest?
    ): WebResourceResponse? {
        Log.i("loadurl", "shouldInterceptRequest ${request?.url}")
        return super.shouldInterceptRequest(view, request)
    }
}

我想象有一个类似的函数,但可能没有idk

override fun idealUrlOverloadFunction(url: String): String or something else {
   return openLocalFile(url)
}

WebView或WebViewClient甚至会对这些内容发出请求吗?
如果是这样的话,我如何中断它们并从机器而不是Web加载资源?

hts6caw3

hts6caw31#

由我解决,考虑这个链接
<link href="../stylesheet.css" rel="stylesheet" type="text/css"/>
附加一些'string +:'组合键,例如
<link href="mystuff:../stylesheet.css" rel="stylesheet" type="text/css"/>
将导致它显示在shouldInterceptRequest()中
我不确定这是否是由于链接未启动或shouldInterceptRequest未侦听造成的,但可以使用.replace轻松修复

相关问题