2017年2月22日 星期三

[Android] Webview 中點連結會開啟其他瀏覽器

最近使用WebView時遇到了一個問題,當我載入一個網頁後,

只要點點選連結,或是網頁裡的submit後就會要求開啟其他瀏覽器

(如果只有裝一種瀏覽器,就會直接由內建的瀏覽器開啟網頁,離開APP)。

我們先來看一下程式碼,載入YAHOO首頁(勿戰,因為它連結多,好示範)


import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;

import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.common.api.GoogleApiClient;

public class MainActivity extends AppCompatActivity {

    /**
     * ATTENTION: This was auto-generated to implement the App Indexing API.
     * See https://g.co/AppIndexing/AndroidStudio for more information.
     */
    private GoogleApiClient client;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://tw.yahoo.com");
    }
}

再來看看我說的情況,Yahoo是一個比較特別的網址,手機連上去會自己轉到手機版頁面,

所以會直接就跳出用瀏覽器開啟的要求。
































所以為了以防以上所提到的幾種問題,需要加入一段程式碼,設定WebView Client來處理

WebView中發生的其他事件。


import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends Activity {

    WebViewClient mWebViewClient;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
       
        mWebViewClient = new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //process redirect URL
                view.loadUrl(url);
                return true;
            }
        };
        //set WebviewClient  to handle click hyper link , post...
        webView.setWebViewClient(mWebViewClient);
        webView.loadUrl("https://tw.yahoo.com");
    }


}

看看結果




點選連結之後

參考連結:


沒有留言:

張貼留言