Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
155
rated 0 times [  162] [ 7]  / answers: 1 / hits: 94467  / 12 Years ago, sun, may 6, 2012, 12:00:00

I'm trying to start an activity from a javascript interface in my webview.
The example shows a toast. How could i call a class instead of a toast?



public class JavaScriptInterface {
Context mContext;

/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}

/** Show a toast from the web page */
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}


this for the html page.



<input type=button value=Say hello onClick=showAndroidToast('Hello Android!') />

<script type=text/javascript>
function showAndroidToast(toast) {
Android.showToast(toast);
}



More From » android

 Answers
19

You have to first register the JavaScriptInterface on your webview.
JavaScriptInterFace can be a inner class as shown below. This class will have a function that you can call from html page( via javaScript ) and inside this function you can write code to change activity.



Here is the working solution for you:



public class JavascriptInterfaceActivity extends Activity {
/** Called when the activity is first created. */


WebView wv;

JavaScriptInterface JSInterface;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
wv = (WebView)findViewById(R.id.webView1);

wv.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript

JSInterface = new JavaScriptInterface(this);
wv.addJavascriptInterface(JSInterface, JSInterface);

wv.loadUrl(file:///android_asset/myPage.html);

}


public class JavaScriptInterface {
Context mContext;

/** Instantiate the interface and set the context */
JavaScriptInterface(Context c) {
mContext = c;
}

@android.webkit.JavascriptInterface
public void changeActivity()
{
Intent i = new Intent(JavascriptInterfaceActivity.this, nextActivity.class);
startActivity(i);
finish();
}
}
}


Here is the html page



<html>
<head>
<script type=text/javascript>
function displaymessage()
{
JSInterface.changeActivity();
}
</script>
</head>

<body>
<form>
<input type=button value=Click me! onclick=displaymessage() />
</form>
</body>
</html>


Hope this helps...


[#85756] Saturday, May 5, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
trevionbronsonr

Total Points: 160
Total Questions: 85
Total Answers: 110

Location: Bonaire
Member since Wed, Mar 29, 2023
1 Year ago
;