Android webview + javascript не показывает результат в android 4.0.x, 3.x
Это моя основная деятельность
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);
}
}
}
Этот мой пример-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>
ниже изображен мой проект
![enter image description here]()
при компиляции этого кода в 2.3.3.2.2.4.1.2.4.2.2 последних версиях
Я получаю правильный вывод из источника
![enter image description here]()
но когда я скомпилировал тот же источник в версии 3.0.3.1 и 4.0.3.4.0.4 версии для Android
Я получаю неправильный вывод, подобный этому
![enter image description here]()
Друзья pls помогают мне... Я не могу решить эту ошибку... Я думаю, что может возникнуть проблема с javascript. Надеюсь, вы, ребята, дадите мне какую-нибудь идею.
Я сохраняю mathjax локально.. в активах
Спасибо заранее...
Ответы
Ответ 1
У меня была аналогичная проблема. Я сделал, что я скопировал все .js файлы в том же каталоге, что и html, и добавил его следующим образом.
<script type="text/javascript" src="MathJax.js"></script>
Я знаю, это звучит немного глупо, но это сработало.
Если это не сработает, скопируйте файл .js в сам файл html и попробуйте его как в заголовке:
<script type="text/javascript">
copy the whole MathJax.js and paste it here
</script>
Ответ 2
У некоторых людей уже была эта проблема (на самом деле... их много...).
Одно сообщение (а также один ответ) привлекло мое внимание: fooobar.com/questions/261791/...
Кажется, вы должны вручную ввести ваш Javascript-вызов в WebViewClient после того, как документ был полностью загружен. У меня нет больше объяснений, но, может быть, вы можете попробовать таким образом!
Ответ 3
Кажется, проблема связана с этой ошибкой Android. Если вы ссылаетесь на файлы с параметрами url, то HTTP 404 (файл не найден), в вашем случае script "MathJax.js? Config = AM_HTMLorMML-full" не будет найден, а therfor не загружен.
Преодоление сотовых и мороженого сэндвичей Сломанные URL-адреса WebView
<!-- hack for honeycomb & ICS -- first script tag will not load but it -->
<!-- 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>
Ответ 4
Он работает, когда script не находит во внешней папке по сравнению с html файлом.
Если вы вытащите html файл из папки MathJax
и измените строку в html файле, как показано ниже, он будет работать.
<script type="text/javascript" src="./MathJax/MathJax.js?config=AM_HTMLorMML-full"></script>
И, конечно, измените java файл на webView.loadUrl("file:///android_asset/sample-asciimath.html");
Ответ 5
Проблема заключается в том, что вы должны установить конфигурацию (AM_HTMLorMML-full.js) для mathjax в вашем html файле (скопируйте код в файл), и вы должны указать полный путь к файлу MathJax.js, как в приведенном ниже коде:
<!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>