2016-08-03 33 views
0

Ich habe ein Problem mit einer Web-Ansicht, die ich benutze. Die JavaScript-Dateien, die zum ordnungsgemäßen Rendern der Ansicht verwendet werden, MÜSSEN in einer bestimmten Reihenfolge geladen werden. Im Browser (Chrome Mobile, Safari Desktop, ...) funktioniert es gut.Android Web-Ansicht Javascript in zufälliger Reihenfolge laden/nicht laden

Allerdings ist das Ergebnis in meiner Web-Ansicht unvorhersehbar.

Dies ist einer der latests andernfalls Lauf hatte ich:

Die 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> 

Hier ist die Java-Code:

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

Das Problem ist, dass zufällig, JavaScript-Dateien werden in falscher Reihenfolge interpretiert oder einfach nicht geladen.

Von meinem Verständnis, Javascript muss in der Reihenfolge der Deklaration geladen werden.

Bin ich falsch? Kann ich irgendetwas tun, um dieses Verhalten zu ändern? (Anders als alle verketten JS zusammen ..)

+0

versuchen, die 'jquery' Skript lokal zu speichern und dann laufen. – Riad

+0

@Riad ich kann, aber eigentlich hatte ich nie jquery Problem noch – Antzi

+0

@Riad zog ich jQuery, und es wird nicht mehr geladen, wenn ich die Web-Ansicht (Last auch von Browsern) verwenden – Antzi

Antwort

0

Ihre Skripte auf dem Web-Site wird funktionieren, aber für sie auf dem Android funktioniert Sie die Skripte manuell geladen werden müssen. Sehen Sie sich die Funktion an, wie das Skript aus Assets geladen wird.

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

auch sicherstellen, aktiviert Sie JS:

webSettings.setJavaScriptEnabled(true); 

und das Manifest ofcourse:

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

Sorry, aber ich benutze einen Web-Server kein lokales Datei ... Plus dies erklärt nicht, warum bekomme ich inkonsistente Ergebnisse. – Antzi