2016-08-03 92 views
0

我遇到了问题,请使用我正在使用的网络视图。 用于正确渲染视图的JavaScript文件必须按特定顺序加载。 在浏览器(chrome mobile; safari desktop,...)上运行良好。Android web view按随机顺序加载javascript /不加载

但是在我的网络视图中,结果是不可预测的。

这是latests失败来看,我有一个:

的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 ..)

+0

尝试在本地保存'jquery'脚本,然后运行。 – Riad

+0

@Riad我可以但实际上我从来没有任何jQuery的问题还没有 – Antzi

+0

@Riad我移动jQuery,并且它不再加载时,当我使用web视图(从浏览器加载好) – Antzi

回答

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); 

和ofcourse清单:

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

对不起,但我使用的Web服务器不是本地文件... 此外,这并不能解释为什么我会得到不一致的结果。 – Antzi