2012-05-06 21 views
24

Estoy tratando de iniciar una actividad desde una interfaz de JavaScript en mi vista web. El ejemplo muestra un brindis. ¿Cómo podría llamar a una clase en lugar de un brindis?usando javascript en la vista web de Android

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(); 
} 
} 

esto para la página html.

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

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

+3

No tengo suficiente experiencia para responder, pero ha leído esto: http://developer.android.com/guide/webapps/webview.html#UsingJavaScript – JaredMcAteer

+0

ya lo hice. – Common

+0

Ok, simplemente no vi en ninguna parte donde habilitó el javascript en la vista web y aunque era relevante. – JaredMcAteer

Respuesta

60

hay que registrarse primero en la JavaScriptInterface en su vista web. JavaScriptInterFace puede ser una clase interna como se muestra a continuación. Esta clase tendrá una función a la que puede llamar desde la página html (a través de javaScript) y dentro de esta función puede escribir código para cambiar la actividad.

Aquí está la solución de trabajo para usted:

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(); 
     } 
    } 
} 

Aquí está la página HTML

<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> 

Espero que esto ayude ...

+0

Gracias amigo mío. casi me ayudó a resolver mi problema. – Common

+0

@Common ¿Debería tomar el código html anterior en un archivo html diferente? –

+4

Esto es útil para llamar a las funciones de Android desde un javascript, pero ¿hay alguna forma de llamar a las funciones de JavaScript desde el código de Android? –

18

También es necesario añadir el @android .webkit.JavascriptInterface anotación en la parte superior de su método changeActivity en su código de Android, debe ejecutar en Android 4.2 o superior. Consulte esto link para más.

+0

¡Esta información adicional a la respuesta anterior es muy útil! – David

+0

usted señor es genio – ashutosh

+0

Realmente me ayudó – vm345

Cuestiones relacionadas