2012-03-06 34 views
5

Tôi có một trang web. Trên trang web, có một văn bản "Pic". Khi tôi hiển thị trang web trong Webview lần đầu tiên tôi có thể thay đổi văn bản thành "PicGreat". Những công việc này!Chế độ xem web - thay đổi nguồn trang trước khi hiển thị trang web?

Tuy nhiên, sau này khi người dùng nhấp vào Liên kết (một nơi nào đó trên trang web), thì tôi chuyển tiếp người dùng đến trang web HTML mới. Trước khi tôi hiển thị trang web, tôi muốn thay đổi chữ "Pic" thành "PicGreat".

Tôi làm cách nào để thực hiện điều đó? Tôi có nên viết một hàm và sau đó gọi hàm trong "công khai boolean shouldOverrideUrlLoading"?

Tôi đã tìm thấy câu hỏi tương tự ở đây trên Stackoverflow, nhưng chưa được giải quyết. 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; 
} 

} 
} 

Trả lời

1

Tôi sẽ sử dụng WebViewClient.shouldInterceptRequest():

Thông báo cho ứng dụng máy chủ của yêu cầu tài nguyên và cho phép ứng dụng trả lại dữ liệu. Nếu giá trị trả về là null, thì WebView sẽ tiếp tục tải tài nguyên như bình thường. Nếu không, phản hồi và dữ liệu trả về sẽ được sử dụng.

LƯU Ý: Phương pháp này được gọi trên một chủ đề không phải là chuỗi giao diện người dùng nên khách hàng nên thận trọng khi truy cập dữ liệu cá nhân hoặc hệ thống xem.

+0

fro javadoc của shouldInterceptRequest, nó nói nó trả về một WebResourceResponse chứa thông tin phản hồi hoặc null nếu WebView sẽ tải tài nguyên. Tôi không thấy nó liên quan đến việc viết lại html như thế nào. – kevin

+0

@kevin Bạn có thể tải trang của mình, viết lại nguồn của nó và trả về nó dưới dạng 'WebResourceResponse'. – user11153

Các vấn đề liên quan