Uncaught ReferenceError при загрузке файла актива на Android 4.4

Я использую следующий код приложения MathJax. http://cs.jsu.edu/wordpress/?p=498#comment-217

В следующей функции я пытаюсь загрузить файл из каталога ресурсов.

public static boolean makeMathView_new(WebView webview) { webview.getSettings().setRenderPriority(RenderPriority.HIGH); webview.getSettings().setJavaScriptEnabled(true); webview.loadDataWithBaseURL("http://bar", "<script type='text/x-mathjax-config'>" +"MathJax.Hub.Config({ messageStyle: 'none', showMathMenu: false, jax: ['input/TeX','output/HTML-CSS'], " +"extensions: ['tex2jax.js']," + "'HTML-CSS': { scale: 100 }," +"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", ""); return true; } 

При работе на эмуляторе Android 4.0 я получаю следующие ошибки.

 V/WebViewChromium(1342): Binding Chromium to the background looper Looper{b1da1340} I/chromium(1342): [INFO:library_loader_hooks.cc(112)] Chromium logging enabled: level = 0, default verbosity = 0 I/BrowserProcessMain(1342): Initializing chromium process, renderers=0 W/chromium(1342): [WARNING:proxy_service.cc(888)] PAC support disabled because there is no system implementation E/chromium(1342): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. E/chromium(1342): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. E/chromium(1342): [ERROR:gl_surface_egl.cc(153)] No suitable EGL configs found. E/chromium(1342): [ERROR:gl_surface_egl.cc(620)] GLSurfaceEGL::InitializeOneOff failed. E/chromium(1342): [ERROR:gpu_info_collector.cc(86)] gfx::GLSurface::InitializeOneOff() failed I/chromium(1101): [INFO:CONSOLE(1)] "Uncaught ReferenceError: MathJax is not defined", source: http://bar/ (1) 

Обновление: после включения предложения ksasq, вот мой новый код, но он все еще не работает.

 webview.loadDataWithBaseURL("http://bar", "<script type='text/x-mathjax-config'>" + "function setupMathJax() {" + "MathJax.Hub.Config({ messageStyle: 'none', showMathMenu: false, jax: ['input/TeX','output/HTML-CSS'], " +"extensions: ['tex2jax.js'],'HTML-CSS': { scale: 100 }," +"TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'] } });" + "}" + "</script>" + "<script type='text/javascript' src='file:///android_asset/MathJax/MathJax.js'></script>" + "<body onload='setupMathJax()'>" + "<span id='math'></span>" + "</body>" ,"text/html","utf-8", ""); 

Вы должны заменить все строки loadUrl(...) с помощью loadUrl(...) evaluateJavascript(...) . Но это только для KitKat (API 19 или выше), поэтому сначала вам нужно выполнить проверку версии SDK:

 if (android.os.Build.VERSION.SDK_INT < 19) { mWebView.loadUrl("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);"); } else { mWebView.evaluateJavascript("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);",null); } 
 if (android.os.Build.VERSION.SDK_INT < 19) { v.loadUrl(url); } else { v.evaluateJavascript(url,null); } 

Похоже, что переменная MathJax не будет установлена ​​до тех пор, пока вы не загрузите <script> . Вы должны переместить это в прослушиватель onload. Что-то вроде:

 <script type='text/x-mathjax-config'> function setupMathJax() { MathJax.Hub.Config(...); } </script> <script type='text/javascript' src='file:///android_asset/MathJax/MathJax.js'></script> <body onload='setupMathJax()'> <span id='math'></span> </body> 

Возможно, первый <script> содержащий вашу function setupMathJax() выполняется до того, как ваш второй <script> загрузил ваш файл MathJax , вызывая исключение, в котором MathJax is not defnied . Попробуйте изменить порядок этих тегов.

Intereting Posts