Webview - 在显示网站之前更改页面源?

时间:2012-03-06 19:27:22

标签: android webview webviewclient

我有一个网站。在网站上,有一个文字“Pic”。当我第一次在Webview中显示网站时,我可以将文本更改为“PicGreat”。这有效!

但是,稍后当用户点击链接(网站上的某个位置)时,我会将用户转发到新的HTML网站。在我展示网站之前,我想将文本“Pic”更改为“PicGreat”。

我该怎么做?我应该编写一个函数,然后调用该函数 “public boolean shouldOverrideUrlLoading”?

我在Stackoverflow上发现了一个类似的问题,但没有解决。 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;
 }

 }
}

1 个答案:

答案 0 :(得分:1)

我会使用WebViewClient.shouldInterceptRequest()

  

通知主机应用程序资源请求并允许   应用程序返回数据。如果返回值为null,则为   WebView将继续像往常一样加载资源。否则,   将使用返回响应和数据。

     

注意:调用此方法   除了线程以外的线程,所以客户端应该谨慎行事   访问私人数据或查看系统时。