2012-03-06 8 views
5

私はウェブサイトを持っています。ウェブサイトには、「Pic」というテキストがあります。初めてWebviewでWebサイトを表示すると、テキストを「PicGreat」に変更できます。これは動作します!Webview - ウェブサイトを表示する前にページソースを変更しますか?

しかし、後でユーザーがリンク(Webサイトのどこか)をクリックすると、そのユーザーを新しいHTML Webサイトに転送します。私はウェブサイトを表示する前に、テキストの「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

私が使用しWebViewClient.shouldInterceptRequest()

ホストアプリケーションにリソース要求を通知し、 アプリケーションがデータを返すことを許可します。戻り値がnullの場合、 WebViewは引き続き通常どおりリソースをロードします。それ以外の場合は、 リターンレスポンスとデータが使用されます。

注:このメソッドは、 UIスレッド以外のスレッドで呼び出されるため、クライアントはプライベートデータまたはビューシステムにアクセスするときには注意を払ってください。

+0

shouldInterceptRequestのjavadocでは、レスポンス情報を含むWebResourceResponseまたはWebViewがリソース自体をロードする必要がある場合はnullを返します。私はそれがHTMLの書き換えにどのように関係しているかわかりません。 – kevin

+0

@kevin自分でページを読み込み、ソースを書き換えて 'WebResourceResponse'として返すことができます。 – user11153

関連する問題