Ho un sito web. Sul sito web, c'è un testo "Pic". Quando visualizzo per la prima volta il sito Web nella Webview, posso modificare il testo in "PicGreat". Funziona!Webview - cambia la sorgente della pagina prima di mostrare il sito web?
Ma, più tardi, quando un utente fa clic su un collegamento (da qualche parte sul sito Web), inoltro l'utente al nuovo sito Web HTML. Prima di mostrare il sito Web, desidero modificare il testo "Pic" in "PicGreat".
Come posso farlo? Devo scrivere una funzione e chiamare la funzione in "booleano pubblico shouldOverrideUrlLoading"?
Ho trovato una domanda simile qui su Stackoverflow, ma non risolta. 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;
}
}
}
per javadoc di shouldInterceptRequest, indica che restituisce A WebResourceResponse contenente le informazioni di risposta o null se WebView deve caricare la risorsa stessa. Non vedo come si relazionava con la riscrittura dell'html. – kevin
@kevin Puoi caricare la pagina da sola, riscrivere la sua origine e restituirla come "WebResourceResponse'. – user11153