2012-03-06 14 views
5

Tengo un sitio web. En el sitio web, hay un texto "Pic". Cuando muestro el sitio web en la vista web por primera vez, puedo cambiar el texto a "PicGreat". ¡Esto funciona!Webview: ¿cambiar el origen de la página antes de mostrar el sitio web?

Pero, más adelante, cuando un usuario hace clic en un enlace (en algún lugar del sitio web), reenvía al usuario al nuevo sitio web HTML. Antes de mostrar el sitio web, quiero cambiar el texto "Pic" a "PicGreat".

¿Cómo puedo hacer eso? ¿Debo escribir una función y luego llamar a la función en "public boolean shouldOverrideUrlLoading"?

He encontrado una pregunta similar aquí en Stackoverflow, pero no se ha resuelto. how to set webview client

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<WebView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/webview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
/> 

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 

WebTest.java

public class WebTestActivity extends Activity { 

WebView mWebView; 
String rline = ""; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

setContentView(R.layout.main); 

mWebView = (WebView) findViewById(R.id.webview); 
mWebView.getSettings().setJavaScriptEnabled(true); 

HttpURLConnection urlConnection = null; 
try 
{ 
URL url = new URL("http://www.picSite.com/"); 
urlConnection = (HttpURLConnection) url.openConnection(); 
InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(in), 4096); 
String line; 

while ((line = rd.readLine()) != null) { 
rline += line+"\n"; 
} 
rd.close(); 

} catch (MalformedURLException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
if (null != urlConnection) 
{ 
urlConnection.disconnect(); 
} 
} 

String getNewCode = rline.replace("Pic", "PicGreat"); 

mWebView.loadData(getNewCode, "text/html", "utf-8"); 

mWebView.setWebViewClient(new HelloWebViewClient()); 
} 

private class HelloWebViewClient extends WebViewClient { 
@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
view.loadUrl(url); 
return true; 
} 

} 
} 

Respuesta

1

me gustaría utilizar WebViewClient.shouldInterceptRequest():

Notificar a la aplicación de host de una solicitud de recurso y permitir que la aplicación devuelva los datos. Si el valor de retorno es nulo, el WebView continuará cargando el recurso como de costumbre. De lo contrario, se utilizará la respuesta de devolución y los datos.

NOTA: Este método se llama en un hilo que no sea el hilo de interfaz de usuario para que los clientes deben tener precaución al acceder a datos privados o el sistema de visión.

+0

Para el javadoc de shouldInterceptRequest, dice que devuelve A WebResourceResponse que contiene la información de respuesta o nulo si el WebView debe cargar el recurso en sí. No veo cómo se relacionó con la reescritura del html. – kevin

+0

@kevin Puede cargar la página usted mismo, reescribir su fuente y devolverla como 'WebResourceResponse'. – user11153

Cuestiones relacionadas