2014-10-21 7 views
6

Ich versuche, die folgenden HTML als String in eine Webansicht zu laden:Android Webview - single line Javascript Kommentare verursacht Uncaught SyntaxError Fehler?

<html> 
    <head> 
    <script> 
     function foo() { 
     // test. 
     } 
    </script> 
    </head> 
    <body> 
    <p>hi.</p> 
    </body> 
</html> 

------------------------------ 

String content = readAboveContentIntoString(); 
WebView webview = ...; 
webview.loadData(content, "text/html", "utf-8"); 

ich die folgende Meldung aus der Webansicht Konsole erhalten:

Uncaught SyntaxError: Unexpected end of input 

Wenn ich den „// Test entfernen. " Kommentar, ich bekomme den Syntaxfehler nicht. Es ist, als ob die Webansicht Zeilenumbrüche werden Strippen, und so die Funktion Körper wie so den Kommentar zu der schließenden Klammer bewerben:

function foo() { // test. } 

Kann jemand anderes repro das? Ich dachte, dass vielleicht mein readAboveContentIntoString() Zeilenumbrüche streifte, aber getestet wurde und es nicht ist. Ich benutze Android 4.4.4.

Dank

- Bearbeiten ---

Auch ein Block Kommentar arbeitet anstelle der Linie Kommentar fein:

/* test. */ 
+0

mit gleicher Ausgabe mit dem neuesten Android Studio zu bauen und API 21 – user636066

+0

Der Glitch bestätigte gesund und munter bis zur Webansicht/Chromium 44 in API 23. Ich schlage vor, mit [dem Problem ] (https://code.google.com/p/android/issues/detail?id=23437), da es als "veraltet" angesehen wurde? –

Antwort

2

hatte ich das gleiche Problem. Es scheint die einzige Möglichkeit zu sein, Kommentare zuerst aus der Inhaltszeichenfolge zu entfernen und sie dann in webview zu laden.

Die Funktion removeComment() entfernt sowohl einzelne Zeilenkommentare als auch Blockkommentare.

private String removeComment(String codeString){ 

    int pointer; 
    int[] pos; 
    String str = codeString; 

    while(true) { 

     pointer = 0; 
     pos = new int[2]; 
     pos[0] = str.indexOf("/*",pointer); 
     pos[1] = str.indexOf("//",pointer); 
     int xPos = xMin(pos); 

     if(xPos != -1){ 

      //========================= Pos 0 
      if(xPos == pos[0]){ 
       pointer = xPos + 2; 
       int pos2 = str.indexOf("*/", pointer); 
       if(pos2 != -1){ 
        str = str.substring(0,xPos) + str.substring(pos2+2,str.length()); 
       } 
       else{ 
        str = str.substring(0,xPos); 
        break; 
       } 
      } 
      //========================= Pos 1 
      if(xPos == pos[1]){ 
       pointer = xPos + 2; 
       int pos2 = str.indexOf('\n', pointer); 
       if(pos2 != -1){ 
        str = str.substring(0,xPos) + str.substring(pos2+1,str.length()); 
       } 
       else{ 
        str = str.substring(0,xPos); 
        break; 
       } 
      } 
     } 
     else break; 
    } 
    return str; 
} 

private int xMin(int[] x){ 
    int out = -1; 

    for(int i = 0;i < x.length;i++){ 
     if(x[i] > out)out = x[i]; 
    } 
    if(out == -1)return out; 

    for(int i = 0;i < x.length;i++){ 
     if(x[i] != -1 && x[i] < out)out = x[i]; 
    } 

    return out; 
} 
0

Enthält Ihre Java-Zeichenfolge einen Zeilenumbruch nach der Kommentarzeile? Wenn nicht, wird alles im JavaScript-Element nach dem ersten "//" als nicht abgeschlossener einzeiliger Kommentar interpretiert, weil nach "// test" kein "\ n" gefunden wird. Siehe

5 Kommentar in dieser Ausgabe: https://issuetracker.google.com/issues/36937564#comment5

Verwandte Themen