1. 程式人生 > >Android攔截html連結事件

Android攔截html連結事件

在一個大的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);
        }
    }
}