美文网首页
拦截替换WebView资源请求

拦截替换WebView资源请求

作者: yin_xin | 来源:发表于2023-02-23 15:49 被阅读0次
    //覆写shouldInterceptRequest,通过url去匹配本地资源,用本地文件替换线上资源,达到拦截替换目的
    private class MyWebViewClient(private val context: Context) : WebViewClient() {
    
            override fun shouldInterceptRequest(
                view: WebView?,
                request: WebResourceRequest?
            ): WebResourceResponse? {
                val webResourceResponse = shouldInterceptRequest(context, request?.url)
                if (webResourceResponse  != null) {
                    return webResourceResponse  
                }
                return super.shouldInterceptRequest(view, request)
            }
        }
    
    //shouldInterceptRequest方法伪代码
    
     if (url.isEmpty() || !url.startsWith("http")) {
            return null
    }
    
       //根据请求url获取本地文件用来替换线上资源
       val targetFile = getFileByUrl(url)
    
       //匹配资源类型
        val mimeType = when {
            relativePath.contains(".css") -> "text/css"
    
            relativePath.contains(".js") -> "application/x-javascript"
    
            relativePath.contains(".js") -> "application/x-javascript"
    
            //图片类型
            relativePath.contains(".jpg") || relativePath.contains(".gif") ||
                    relativePath.contains(".png") || relativePath.contains(".jpeg") -> "image/*"
    
            //pdf
            relativePath.endsWith(".pdf") -> "application/pdf"
    
            //word文档
            relativePath.endsWith(".doc") || relativePath.endsWith(".docx") -> "application/msword"
    
            relativePath.endsWith(".ppt") -> "application/pdf"
    
            //表格文档
            relativePath.endsWith(".xlsx") || relativePath.endsWith(".xla") || relativePath.endsWith(".xlc") || relativePath.endsWith(
                ".xlm"
            ) || relativePath.endsWith(".xls") || relativePath.endsWith(".xlt") || relativePath.endsWith(
                ".xlw"
            ) -> "application/vnd.ms-excel"
    
            else -> "text/html"
        }
    
        val ins = FileInputStream(targetFile)
        return WebResourceResponse(mimeType, "utf-8", ins)
    

    相关文章

      网友评论

          本文标题:拦截替换WebView资源请求

          本文链接:https://www.haomeiwen.com/subject/hgxtldtx.html