Android攔截html連結事件
阿新 • • 發佈:2019-01-24
在一個大的Android專案中,由於客戶端來不及更新和實現,經常會內嵌一些網頁(在一些大型的網際網路公司,PC的產品總是跑在客戶端的前面),比如活動頁面,通常可以內嵌用html5實現的頁面,可以適配手機。但是這些網頁中有好多連結,但是這些連結有些內容有是我們客戶端已經實現的,比如有一個註冊連結,其實客戶端也實現了註冊功能,我們不想再繼續跳轉到網頁註冊,而是開啟客戶端某個註冊Activity,可以通過以下方式來實現:
html檔案
將html檔案放在assets資料夾下(也可以放在服務端,只需要修改java檔案要載入的url即可),在網頁中可以使用href也可以使用onClick實現連結。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no,maximum-scale=1.0"><!--這是手機頭部宣告-->
<title>Text頁面</title>
</head>
<body>
<nav>
<ul class="nav" >
<li>
<a href="http://baidu.com" title="第一項">我是第一項</a>
</li>
<li>
<a href="#" title="第二項">我是第二項</a>
</li>
</ul>
</nav>
</body>
</html>
xml 佈局檔案
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/wv_lorry"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
java程式碼
在android中,攔截你感興趣的連結,然後做自己的處理。
public class MagicBoxActivity extends AppCompatActivity {
private static String TAG = "Chunna==MagicBox";
private WebView wvLorry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_magic_box);
wvLorry = (WebView)findViewById(R.id.wv_lorry);
wvLorry.loadUrl("file:///android_asset/text.html");//載入assets資料夾下網頁
wvLorry.setWebViewClient(new MyWebViewClient());
}
// 監聽所有點選的連結,如果攔截到我們需要的,就跳轉到相對應的頁面。
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d(TAG,"攔截到網頁的點選事件url = "+url);
if (url != null && url.contains("baidu.com")) {
Log.d(TAG,"攔截到需要的URL");
//實現我們自己的處理,例如跳轉到另一個Activity
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
view.getSettings().setJavaScriptEnabled(true);
super.onPageFinished(view, url);
}
}
}