Android网页视图以随机顺序加载javascript /不加载

时间:2016-08-03 07:09:49

标签: javascript android html android-webview

我使用的是我正在使用的网络视图的问题。 用于正确呈现视图的javascript文件必须按特定顺序加载。 在浏览器(chrome mobile; safari desktop,...)上运行良好。

然而,在我的网页视图中,结果是不可预测的。

这是我失败的最后一次:

HTML:

<!DOCTYPE html>
<html lang="en">
        <head>
                <title></title>
                <meta charset="utf-8">
                <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
                <style>
                        body {
                                font-family: Monospace;
                                background-color: #000;
                                color: #fff;
                                margin: 0px;
                                overflow: hidden;
                        }
                </style>
                </head>
        <body>
                <canvas class="emscripten" id="canvas" oncontextmenu="event.preventDefault()"></canvas>
                <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
                <script src="js/script1.js"></script>
                <script src="js/script2.js"></script>
                <script src="js/script3.js"></script>
                <script src="js/script4.js"></script>
                ... More scripts...
        </body>
</html>

这是Java代码:

   mWebView = (WebView)findViewById(R.id.webView);
    mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    //mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setHorizontalFadingEdgeEnabled(false);
    mWebView.setScrollbarFadingEnabled(false);
    mWebView.setVerticalFadingEdgeEnabled(false);
    mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    mWebView.loadUrl("http://192.168.1.24:8000/path/to/index.html");

问题是随机,javascript文件的解释顺序错误或者没有加载。

根据我的理解,javascript必须按声明顺序加载。

我错了吗? 我有什么办法可以改变这种行为吗? (除了将所有JS连接在一起..)

1 个答案:

答案 0 :(得分:0)

您的脚本将在网站上运行,但为了使其在Android上运行,您需要手动加载脚本。查看函数如何从资产加载脚本。

private void injectScriptFile(WebView view, String scriptFile) {
      InputStream input;
      try {
         input = getAssets().open(scriptFile);
         byte[] buffer = new byte[input.available()];
         input.read(buffer);
         input.close();

         // String-ify the script byte-array using BASE64 encoding !!!
         String encoded = Base64.encodeToString(buffer, Base64.NO_WRAP);
         view.loadUrl("javascript:(function() {" +
                      "var parent = document.getElementsByTagName('head').item(0);" +
                      "var script = document.createElement('script');" +
                      "script.type = 'text/javascript';" +
         // Tell the browser to BASE64-decode the string into your script !!!
                      "script.innerHTML = window.atob('" + encoded + "');" +
                      "parent.appendChild(script)" +
                      "})()");
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }

See Here Example

还要确保你启用了JS:

webSettings.setJavaScriptEnabled(true);

和课程表现:

<uses-permission android:name="android.permission.INTERNET" />