2014-10-21 14 views
6

Tôi cố gắng để tải html sau như một chuỗi thành một webview:Android webview - dòng đơn javascript nhận xét gây ra lỗi Uncaught SyntaxError?

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

Tôi nhận được thông báo sau từ webview console:

Uncaught SyntaxError: Unexpected end of input 

Nếu tôi loại bỏ các "// test. " bình luận, tôi không nhận được lỗi cú pháp. Đó là nếu webview được tước dòng mới, và do đó cơ quan chức năng đang áp dụng những nhận xét để nẹp kết thúc như vậy:

function foo() { // test. } 

Can bất cứ ai khác repro này? Tôi nghĩ có lẽ readAboveContentIntoString() của tôi đã được tước các dòng mới, nhưng đã được thử nghiệm và nó không phải là. Tôi đang sử dụng Android 4.4.4.

Cảm ơn

- Chỉnh sửa ---

Ngoài ra, một lời nhận xét khối hoạt động tốt ở vị trí của bình luận dòng:

/* test. */ 
+0

có cùng một vấn đề với mới nhất Studio build Android và API 21 – user636066

+0

Các trục trặc khẳng định sống và đá lên đến webview/Chromium 44 trong API 23. Tôi đề nghị với sự tham gia [vấn đề này ] (https://code.google.com/p/android/issues/detail?id=23437) vì nó được coi là "lỗi thời"? –

Trả lời

2

tôi đã cùng một vấn đề. Có vẻ như cách duy nhất là xóa nhận xét khỏi chuỗi nội dung trước rồi tải nó lên webview.

String content = readAboveContentIntoString(); 
WebView webview = ...; 

// Add This : 
content = removeComment(content); 

webview.loadData(content, "text/html", "utf-8"); 

Hàm remove() sẽ xóa cả nhận xét một dòng và chặn nhận xét.

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

Chuỗi Java của bạn có chứa dấu ngắt dòng sau hàng nhận xét không? Nếu không, mọi thứ trong phần tử javascript sau "//" đầu tiên sẽ được hiểu là một nhận xét đơn lẻ chưa được phân tích, vì nó không tìm thấy "\ n" sau "// test".

Xem bình luận 5 trong vấn đề này: https://issuetracker.google.com/issues/36937564#comment5

Các vấn đề liên quan