Webview shouldinterceptrequest ejemplo

Necesito saber cómo funciona el shouldinterceptrequest . No sé cómo crear y manejar este método para leer y reemplazar el enlace CSS. ¡Gracias!

Bueno, la respuesta corta es que funciona de forma bastante similar a shouldOverrideUrlLoading(WebView view, String url) , como se ilustra en el tutorial de WebView .

Para empezar, consulte el siguiente código. Simplemente anula el shouldInterceptRequest(WebView view, String url) de su WebViewClient. Obviamente no tienes que hacerlo en línea, pero por el bien de la compacidad que es lo que hice:

  WebView webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new WebViewClient() { @Override public WebResourceResponse shouldInterceptRequest (final WebView view, String url) { if (url.contains(".css")) { return getCssWebResourceResponseFromAsset(); } else { return super.shouldInterceptRequest(view, url); } } /** * Return WebResourceResponse with CSS markup from a String. */ @SuppressWarnings("deprecation") private WebResourceResponse getCssWebResourceResponseFromString() { return getUtf8EncodedCssWebResourceResponse(new StringBufferInputStream("body { background-color: #F781F3; }")); } /** * Return WebResourceResponse with CSS markup from an asset (eg "assets/style.css"). */ private WebResourceResponse getCssWebResourceResponseFromAsset() { try { return getUtf8EncodedCssWebResourceResponse(getAssets().open("style.css")); } catch (IOException e) { return null; } } /** * Return WebResourceResponse with CSS markup from a raw resource (eg "raw/style.css"). */ private WebResourceResponse getCssWebResourceResponseFromRawResource() { return getUtf8EncodedCssWebResourceResponse(getResources().openRawResource(R.raw.style)); } private WebResourceResponse getUtf8EncodedCssWebResourceResponse(InputStream data) { return new WebResourceResponse("text/css", "UTF-8", data); } }); webview.loadUrl("http://stackoverflow.com"); 

Capture la carga del archivo css y devuelva su propia WebResourceResponse contiene los datos que desea cargar en lugar.

Observe que este método requiere el nivel 11 de la API .

Si desea hacer algo similar para Android 2.x, puede intentar utilizar el anterior shouldOverrideUrlLoading(WebView view, String url) para evitar cargar la página, buscarla manualmente, reemplazar la referencia al archivo css con su propio , Y finalmente llamar a loadData(String data, String mimeType, String encoding) (o loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) ) en el WebView, pasando el contenido html manipulado como una cadena.

Antes de:

antes de

Después:

Después

Esto también podría ser interesante para usted. Lee archivos de carpetas específicas y si una solicitud es entrante con este nombre de archivo que utiliza el archivo de la carpeta de activos y no de la web.

  //get list of files of specific asset folder private ArrayList listAssetFiles(String path) { List myArrayList = new ArrayList(); String [] list; try { list = getAssets().list(path); for(String f1 : list){ myArrayList.add(f1); } } catch (IOException e) { e.printStackTrace(); } return (ArrayList) myArrayList; } //get mime type by url public String getMimeType(String url) { String type = null; String extension = MimeTypeMap.getFileExtensionFromUrl(url); if (extension != null) { if (extension.equals("js")) { return "text/javascript"; } else if (extension.equals("woff")) { return "application/font-woff"; } else if (extension.equals("woff2")) { return "application/font-woff2"; } else if (extension.equals("ttf")) { return "application/x-font-ttf"; } else if (extension.equals("eot")) { return "application/vnd.ms-fontobject"; } else if (extension.equals("svg")) { return "image/svg+xml"; } type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); } return type; } //return webresourceresponse public WebResourceResponse loadFilesFromAssetFolder (String folder, String url) { List myArrayList = listAssetFiles(folder); for (Object str : myArrayList) { if (url.contains((CharSequence) str)) { try { Log.i(TAG2, "File:" + str); Log.i(TAG2, "MIME:" + getMimeType(url)); return new WebResourceResponse(getMimeType(url), "UTF-8", getAssets().open(String.valueOf(folder+"/" + str))); } catch (IOException e) { e.printStackTrace(); } } } return null; } //@TargetApi(Build.VERSION_CODES.LOLLIPOP) @SuppressLint("NewApi") @Override public WebResourceResponse shouldInterceptRequest(final WebView view, String url) { //Log.i(TAG2, "SHOULD OVERRIDE INIT"); //String url = webResourceRequest.getUrl().toString(); String extension = MimeTypeMap.getFileExtensionFromUrl(url); //I have some folders for files with the same extension if (extension.equals("css") || extension.equals("js") || extension.equals("img")) { return loadFilesFromAssetFolder(extension, url); } //more possible extensions for font folder if (extension.equals("woff") || extension.equals("woff2") || extension.equals("ttf") || extension.equals("svg") || extension.equals("eot")) { return loadFilesFromAssetFolder("font", url); } return null; } 
  • Error de vista web de Android "Señal fatal 5 (SIGTRAP)"
  • Aliasing del borde de radio de WebView de Android
  • ¿Cómo acceder a elementos html contenidos dentro de una webview?
  • ¿Puedo pasar un objeto Javascript a una WebView de Android?
  • Cómo obtener el evento de la finalización del video de youtube en android webview
  • ¿WebView no carga datos?
  • Android- usando addJavaScriptInterface para devolver un valor de Javascript
  • GetContentHeight () no funciona correctamente
  • Inicie sesión en la cuenta de Google en la vista web mediante el token del administrador de cuentas
  • Window.close () no funciona en android webview?
  • ¿En un WebView hay una manera para que shouldOverrideUrlLoading determine si está cogiendo una redirección contra un usuario que chasca un acoplamiento?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.