Android Using JavaScript in WebView

3198 ワード

Androidの開発では、nativeとHTML 5ページのインタラクションが必要になる場合があります.2つの方法があります.1つは、WebViewにJavascriptコールバックインタフェースを追加することです.1つは、WebViewのurlをブロックしてインタラクションの目的を達成することです.
Enabling JavaScript
WebViewのデフォルトはJavaScriptを無効にしているので、この設定を開いて対話するには、次のようにします.
webView.getSettings().setJavaScriptEnabled(true);

Javascript invoke Java
JavaScriptがローカルコードを呼び出して現在のActivityをオフにするとしたら、どうすればいいですか?
WebViewJavaScriptインタフェースを設定するには、次の方法を使用します.
webView.addJavascriptInterface(Object object, String name)

最初のパラメータはインタフェースクラスで、2番目のパラメータはこのインタフェースオブジェクトをJavaScriptコンテキストに挿入するときに対応する名前で、JavaScriptはこの名前でインタフェースのメソッドを呼び出します.
まず、このインタフェースクラスを定義します.
import android.app.Activity;
import android.webkit.JavascriptInterface;

import java.lang.ref.WeakReference;

/**
 * Created by iamwent on 21/02/2017.
 *
 * @author iamwent
 * @since 21/02/2017
 */

public class JSCallback {

    // avoid memory leak
    private final WeakReference weak;

    public JSCallback(Activity activity) {
        weak = new WeakReference<>(activity);
    }

    @JavascriptInterface
    public void finish() {
        if (!weak.get().isDestroyed()) {
            weak.get().finish();
        }
    }
}

なお、セキュリティ上の理由から、API 17以上で@JavascriptInterfaceによって注釈付けされた方法が呼び出される
WebViewにこのインタフェースをロードします.
webView.addJavascriptInterface(new JSCallback(HomeActivity.this), "native");

JavaScriptでの呼び出しは簡単です.
window.native.finish()

WindowsはJavaScriptのデフォルトのグローバルオブジェクトであり、nativeは私たちが伝えた名前であり、他のものに変更することもできます.
メモリ漏洩を回避するために、onDestroy()などの適切な場所で次の方法を呼び出すことができます.

webView.removeJavascriptInterface("native");


       ,   native    webview   url,    :

```java
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        if (request.getUrl().getScheme().equals("native")) {
            // todo

            return true;
        }

        return super.shouldOverrideUrlLoading(view, request);
    }
});

Java invoke JavaScript

native JavaScript , webView.loadUrl("javascript:method(params)、methodはJavaScriptに された です.

//      ,   JavaScript     native   
webView.loadUrl("javascript:todo()");

Android 4.4およびそれ のバージョンでは、WebViewでは、JavaScriptコードを で するために できるevaluateJavascript()という が されており、この はメインスレッドで び す があります.
//        ,    
String script = "";
webView.evaluateJavascript(script, new ValueCallback() {
    @Override
    public void onReceiveValue(String value) {
        // todo
    }
});

demoは かないで、 です.
Reading More
  • Building Web Apps in WebView | Android Developers
  • Android WebViewとJavaScriptのインタラクション
  • AndroidでのJavaとJavaScriptのインタラクション