Android Using JavaScript in WebView
3198 ワード
Androidの開発では、nativeとHTML 5ページのインタラクションが必要になる場合があります.2つの方法があります.1つは、WebViewにJavascriptコールバックインタフェースを追加することです.1つは、WebViewのurlをブロックしてインタラクションの目的を達成することです.
Enabling JavaScript
WebViewのデフォルトはJavaScriptを無効にしているので、この設定を開いて対話するには、次のようにします.
Javascript invoke Java
JavaScriptがローカルコードを呼び出して現在のActivityをオフにするとしたら、どうすればいいですか?
WebViewJavaScriptインタフェースを設定するには、次の方法を使用します.
最初のパラメータはインタフェースクラスで、2番目のパラメータはこのインタフェースオブジェクトをJavaScriptコンテキストに挿入するときに対応する名前で、JavaScriptはこの名前でインタフェースのメソッドを呼び出します.
まず、このインタフェースクラスを定義します.
なお、セキュリティ上の理由から、API 17以上で
WebViewにこのインタフェースをロードします.
JavaScriptでの呼び出しは簡単です.
WindowsはJavaScriptのデフォルトのグローバルオブジェクトであり、nativeは私たちが伝えた名前であり、他のものに変更することもできます.
メモリ漏洩を回避するために、
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のインタラクション