MathJax有时无法在Android

时间:2016-02-18 14:37:36

标签: android webview mathjax

我已将MathJax放入我的项目中以在我的应用程序上显示数学方程式,它似乎正在工作,但是,在某些情况下它无法加载。我无法重现它何时发生,因为它是随机发生的。

我可以在WebView中看到正在加载MathJax,但偶尔也找不到乳胶代码 - 它不会使乳胶代码变灰,它只是忽略它并显示它原始。但是当我尝试加载相同的代码时,下次尝试时会让我感到困惑 - Mathjax找到并正确显示它。

SIDE NOTE

我正在使用具有Fragment ViewPager的Activity,并且在这些片段中,正在创建加载MathJax的WebView。有趣的是 - 当我开始活动时(片段和Webview立即与其他视图一起创建)。在一些性能较低的设备上,它永远不会在第一页上显示乳胶代码(乳胶不会灰显,即使MathJax被加载也会显示原始代码)。

我想要加载MathJax的活动还有一些内存很重要的东西,比如位图(在通过ViewPager销毁项目时会被回收)。

这让我觉得可能是由于某种延迟,它无法加载?

将MathJax加载到WebView中的

CODE

public static void createWebView(WebView view,String questionHtml) {
    // i get string in HTML format so i parse it here
    // HTML example code: "<p>This is the equation that is being sent: <span class="math-tex">\(x = {-b \pm \sqrt{b^2-4ac} \over 2a}\)</span></p>"
    final String question = Html.fromHtml(questionHtml).toString();
    final WebView w =  view;
    w.setVisibility(View.VISIBLE);
    w.getSettings().setJavaScriptEnabled(true);
    w.loadDataWithBaseURL("http://bar/", "<script type='text/x-mathjax-config'>"
            + "MathJax.Hub.Config({ "
            + "showMathMenu: false, "
            + "jax: ['input/TeX','output/HTML-CSS'], "
            + "extensions: ['tex2jax.js'], "
            + "TeX: { extensions: ['AMSmath.js','AMSsymbols.js',"
            + "'noErrors.js','noUndefined.js'] } "
            + "});</script>"
            + "<script type='text/javascript' "
            + "src='file:///android_asset/MathJax/MathJax.js'"
            + "></script><span id='math'></span>", "text/html", "utf-8", "");

    w.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (!url.startsWith("http://bar")) {
                return;
            }
            if (android.os.Build.VERSION.SDK_INT < 19) {
                w.loadUrl("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);");
                w.loadUrl("javascript:document.getElementById('math').innerHTML='"
                        + doubleEscapeTeX(question)
                        + "';");
            } else {
                w.evaluateJavascript("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);",null);
                w.evaluateJavascript("javascript:document.getElementById('math').innerHTML='"
                        + doubleEscapeTeX(question)
                        + "';",null);
            }

        }
    });
}

奖金问题有没有办法隐藏在WebView中显示状态的加载信息?

enter image description here

获得奖金的问题在Peter Krautzberger的帮助下,只需添加:

+ "messageStyle: 'none', "

下方的网址中

+ "MathJax.Hub.Config({ "

更新

现在我可以100%确认MathJax的加载可能性完全依赖于设备性能,我一直在尝试:

三星Galaxy Note 10(约80%的加载机会)

三星Nexus 5(50%几率)

和中兴Blade G(几乎从不)

此外,经过一些研究,我发现一些问题,加载MathJax的多个WebView无法同时加载到同一个活动中,这使我得出某种结论,即WebView的优化程度很低。如果我错了或者我的加载代码是坏的(我真的希望它是),请纠正我。

最糟糕的是,有很多问题没有任何明确的答案,为什么会发生这种情况。

部分解决方案

开始使用MathView库并从MathJax更改为KaTex,它似乎加载速度更快,所有设备都有100%的机会。副作用是KaTex有点丑陋,但它在一天结束时完成了它的工作。

0 个答案:

没有答案