Execute Javascript in WebView
Description
The following code shows how to Execute Javascript in WebView.
Example
Main layout xml file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="hello"
/>
</LinearLayout>
Main Activity Java code
package com.java2s.myapplication3.app;
//from w w w . ja va 2 s . c om
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(mClient);
webview.addJavascriptInterface(new MyJavaScriptInterface(), "BRIDGE");
setContentView(webview);
webview.loadUrl("file:///android_asset/form.html");
}
private static final String JS_SETELEMENT = "javascript:document.getElementById('%s').value='%s'";
private static final String JS_GETELEMENT = "javascript:window.BRIDGE.storeElement('%s',document.getElementById('%s').value)";
private static final String ELEMENTID = "emailAddress";
private WebViewClient mClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
executeJavascript(view,String.format(JS_GETELEMENT, ELEMENTID, ELEMENTID) );
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
SharedPreferences prefs = getPreferences(Activity.MODE_PRIVATE);
executeJavascript(view,String.format(JS_SETELEMENT, ELEMENTID, prefs.getString(ELEMENTID, "")) );
}
};
private void executeJavascript(WebView view, String script) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
view.evaluateJavascript(script, null);
} else {
view.loadUrl(script);
}
}
class MyJavaScriptInterface {
@JavascriptInterface
public void storeElement(String id, String element) {
SharedPreferences.Editor edit = getPreferences(Activity.MODE_PRIVATE).edit();
edit.putString(id, element);
edit.commit();
if(!TextUtils.isEmpty(element)) {
Toast.makeText(MainActivity.this, element, Toast.LENGTH_SHORT).show();
}
}
}
}
\assets\form.html
<!DOCTYPE HTML>
<html>
<form name="input" action="form.html" method="get">
Enter Email: <input type="text" id="emailAddress" />
<input type="submit" value="Submit" />
</form>
</html>