iOS

open class URLSchemeHandler: NSObject, WKURLSchemeHandler {

    open func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
        
        guard let url = urlSchemeTask.request.url, let scheme = url.scheme else { return }

        let data = try Data(contentsOf: url)
       if let response = self.createHTTPResponse(url: url, mimeType: filePathUrl.pathExtension.mimeType){
           urlSchemeTask.didReceive(response)
           urlSchemeTask.didReceive(data)
           urlSchemeTask.didFinish()
       }else{
           urlSchemeTask.didFailWithError(NSError(domain: "URLShemeHandler", code: 100, userInfo: nil))
       }

    }

    open override func createHTTPResponse(url: URL, mimeType: String, contentLength: Int = 0) -> URLResponse? {
        let headerFields: [String:String] = [
            "Content-Type": mimeType,
            "Access-Control-Allow-Origin":"*",
            "Access-Control-Allow-Methods":"GET, POST, PUT, DELETE",
            "Access-Control-Allow-Headers":"Content-Type, Authorization"
        ]
        let response = HTTPURLResponse(url: url, statusCode: 200, httpVersion: "HTTP/1.1", headerFields: headerFields)
        return response
    }
    
}

安卓 腾讯x5

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        String url = request.getUrl().toString();
        
        // 拦截特定URL并返回自定义数据
        if (url.contains("your-custom-path")) {
            try {
              // 生成自定义数据(如JSON)
              String jsonData = "{\"status\": 200, \"data\": \"Hello X5\"}";
              InputStream inputStream = new ByteArrayInputStream(jsonData.getBytes("UTF-8"));
              
              // 构造响应头
              Map<String, String> headers = new HashMap<>();
              headers.put("Access-Control-Allow-Origin", "*"); // 允许所有域
              headers.put("Access-Control-Allow-Methods", "GET, POST"); // 允许的HTTP方法
              headers.put("Content-Type", "application/json"); // 数据类型
              
              // 构造WebResourceResponse(MIME类型、编码、输入流、头信息)
              return new WebResourceResponse("application/json", "UTF-8", 200, "OK", headers, inputStream);
                
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        
        // 默认行为:不拦截,由WebView自行加载
        return super.shouldInterceptRequest(view, request);
    }
});