Android webview+javascript no muestra resultados en android 4.0.x, 3.x
mathjax (5)
Esta es mi actividad principal
package com.example.mathjax_issues;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(WebView)findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new MyWebViewClient());
webView.loadUrl("file:///android_asset/MathJax/test/sample-asciimath.html");
// String html="<!DOCTYPE html> <html> <head> <title>MathJax AsciiMath Test Page</title> <!-- Copyright (c) 2012-2013 The MathJax Consortium --> <meta http-equiv=/"Content-Type/" content=/"text/html; charset=UTF-8/" /> <meta http-equiv=/"X-UA-Compatible/" content=/"IE=edge/" /> <script type=/"text/javascript/" src=/"file:///android_asset/MathJax/MathJax.js?config=AM_HTMLorMML-full/"></script> </head> <body> <p> When `a != 0`, there are two solutions to `ax^2 + bx + c = 0` and they are </p> <p style=/"text-align:center/"> `x = (-b +- sqrt(b^2-4ac))/(2a) .` </p> </body> </html> ";
// Log.e("html",html);
// webView.loadDataWithBaseURL("file:///android_asset/MathJax", html, "text/html","utf-8", "");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class MyWebViewClient extends WebViewClient
{
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
}
}
Este es mi muestra-asciimath.html
<!DOCTYPE html>
<html>
<head>
<title>MathJax AsciiMath Test Page</title>
<!-- Copyright (c) 2012-2013 The MathJax Consortium -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript" src="../MathJax.js?config=AM_HTMLorMML-full"></script>
</head>
<body>
<p>
When `a != 0`, there are two solutions to `ax^2 + bx + c = 0` and they are
</p>
<p style="text-align:center">
`x = (-b +- sqrt(b^2-4ac))/(2a) .`
</p>
</body>
</html>
a continuación está la imagen de mi proyecto
al compilar este código en 2.3.3,2.2,4.1.2,4.2.2 últimas versiones
Obtengo el resultado correcto de la fuente
pero cuando compilé la misma fuente en 3.0.3.1 y 4.0.3.4.0.4 versión de Android
Estoy obteniendo el resultado incorrecto como este
Los amigos me ayudan ... No puedo resolver este error ... Creo que puede haber un problema de javascript. Espero que me den una idea.
Estoy almacenando el mathjax localmente ... en activos
Gracias por adelantado ...
Funciona cuando el script no se encuentra en una carpeta externa en comparación con el archivo html.
Si saca el archivo html de la carpeta MathJax
y cambia la línea en el archivo html como se muestra a continuación, funcionará.
<script type="text/javascript" src="./MathJax/MathJax.js?config=AM_HTMLorMML-full"></script>
Y, por supuesto, cambie el archivo java a webView.loadUrl("file:///android_asset/sample-asciimath.html");
Parece que el problema está relacionado con este error de Android. Si hace referencia a archivos con parámetros de url, se produce un HTTP 404 (archivo no encontrado), en su caso el script "MathJax.js? Config = AM_HTML o MML-completo" no se encontrará y no se cargará.
Superando las URL Broken WebView de Honeycomb y Ice Cream Sandwich
<!-- hack for honeycomb & ICS -- first script tag will not load but it''s -->
<!-- needed for proper MathJax initialisation - clean solution would be to -->
<!-- pass the init data "AM_HTMLorMML-full" in some other way to MathJax -->
<script type="text/javascript" src="../MathJax.js?config=AM_HTMLorMML-full"></script>
<script type="text/javascript" src="../MathJax.js"></script>
Tuve un problema similar. Lo que hice fue copiar todos los archivos .js en el mismo directorio donde estaba el html y lo agregué de la siguiente manera.
<script type="text/javascript" src="MathJax.js"></script>
Sé que suena un poco estúpido, pero funcionó.
Si eso no funciona, copie el archivo .js en el archivo html e inténtelo como en el encabezado:
<script type="text/javascript">
copy the whole MathJax.js and paste it here
</script>
El problema se debe a que tiene que configurar las configuraciones (AM_HTML oMML-full.js) para mathjax en su archivo html (Copie el código en su archivo), y debe especificar la ruta completa del archivo MathJax.js, como en el código a continuación:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="text/javascript" src="../MathJax/MathJax.js">
MathJax.Hub.Config({
config: ["MMLorHTML.js"],
extensions: ["asciimath2jax.js","MathEvents.js","MathZoom.js","MathMenu.js","toMathML.js"],
jax: ["input/AsciiMath","output/HTML-CSS","output/NativeMML"]
});
MathJax.Ajax.loadComplete("[MathJax]/config/AM_HTMLorMML-full.js");
</script>
</head>
<body>
<p>`/sqrt{2x + 1}`</p>
</body>
</html>
Algunas personas ya tenían este problema (en realidad ... muchas de ellas ...).
Una publicación (y también una respuesta) me llamó la atención: https://.com/a/7197748/1387484
Parece que debe insertar su llamada de Javascript en WebViewClient manualmente, después de que el documento se haya cargado por completo. ¡No tengo más explicaciones, pero tal vez puedas intentarlo de esta manera!