1. 程式人生 > >Android之webView與js互動

Android之webView與js互動

一、java呼叫js操作:

1.佈局檔案:

    <WebView
        android:id="@+id/web"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </WebView>

2.獲取一個網頁:

        //web顯示一個網頁 :
        web.loadUrl("https://www.baidu.com/");
        //web顯示一個本地網頁 :
        web.loadUrl("  file:///android_asset/hi.html");

3.對webview屬性操作:

         /**
         * 設定web:
         */

        WebSettings settings = web.getSettings();
        settings.setJavaScriptEnabled(true);//支援javaScript
        settings.setSupportZoom(true);//縮放
        settings.setUseWideViewPort(true);//螢幕自適

4.跳轉:

 //跳轉:
        web.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                Toast.makeText(MainActivity.this, "網頁開始載入", Toast.LENGTH_SHORT).show();
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.contains("baidu")){
                    web.loadUrl("https://blog.csdn.net/u012124438/article/details/53371102");
                }
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Toast.makeText(MainActivity.this, "網頁結束", Toast.LENGTH_SHORT).show();
            }
        });

5.返回上一步:

//覆蓋系統的回退鍵 :
    @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       if (keyCode == KeyEvent.KEYCODE_BACK && web.canGoBack()){
           web.goBack();
           return true;
      return super.onKeyDown(keyCode, event);
    }

6.不在原本webview中操作:

 web.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(android.webkit.WebView view, WebResourceRequest request) {

                web.loadUrl(String.valueOf(request));
                return super.shouldOverrideUrlLoading(view, request);
            }
        });
        web.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(android.webkit.WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                if(newProgress == 0){

                }else if(newProgress == 100){

                }
            }
        });

二、js呼叫java

1.assets下建立一個html檔案:

<!DOCTYPE html>
<html>
    <body>
        <input
            type="button"
            value="js呼叫java進行吐司"
            onclick="myObj.showToast('呼叫成功');"
        />

        <input
            type="button"
            value="js呼叫java進行展示列表"
            onclick="myObj.shouList();"
        />

    </body>
</html>

2.建立一個呼叫方法的具體類:

public class MyObject {

    //設定上下文環境:
    Context context;

    public MyObject(Context context) {
        this.context = context;
    }

    //設定類的暴露介面:
    @JavascriptInterface
    public void showToast(String name){
        Toast.makeText(context, name+"Leslie", Toast.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void showList(){
        new AlertDialog.Builder(context)
                .setTitle("Missing_Stars")
                .setIcon(R.drawable.a)
                .setItems(new String[]{"Leslie","Anita","Danay"},null)
                .setPositiveButton("Yes",null)
                .create()
                .show();

    }
}

3.主類進行實現呼叫

public class Ndk_five extends Fragment {
    @BindView(R.id.webview)
    WebView webview;
    Unbinder unbinder;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.ndk_5, null);
        unbinder = ButterKnife.bind(this, view);

        WebSettings settings = webview.getSettings();
        settings.setSupportZoom(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setJavaScriptEnabled(true);

        //使用的是Chrome瀏覽器,只有使用Chrome瀏覽器才可以彈出HTML中自己的對話方塊:
        webview.setWebChromeClient(new WebChromeClient());
        webview.loadUrl("file:///android_asset/work.html");
        webview.addJavascriptInterface(new MyObject(getActivity()),"myObj");
        return view;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }
}