Android webview“未捕获的SyntaxError:意外的令牌非法”

在我的android程序中,我得到了一个webview,并需要dynamic地设置值到webview元素(textareas,checkbox等)。 我有一个JavaScript方法从程序接收值,并执行string操作,并将值存储到正确的元素。 但我总是得到这个错误…有点卡在这里。 任何帮助将不胜感激。

我成功地执行了w3schools TryIt编辑器中的脚本,但没有在程序中工作!

final WebView webView = new WebView(getApplicationContext()); LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1); webView.setLayoutParams(params); webView.setBackgroundColor(Color.LTGRAY); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); webView.setWebChromeClient(new android.webkit.WebChromeClient()); webView.setWebViewClient(new WebChromeClient()); webView.loadData("<!DOCTYPE html><html><body>"+ questionsArray[questionIndex] +"</body></html>", "text/html", "UTF-8"); webView.addJavascriptInterface(javaScriptInterface, "HtmlViewer"); scrolRootLayout.addView(surveyWebView); 

和我的Javascript方法来设置webView中的textareas值

 function myFunction(var_) { var str = var_.replace("-!!!-",""); var pipeSplitedArray = str.split("||"); for(var i=0; i<pipeSplitedArray.length-1; i++) { if(pipeSplitedArray[i].indexOf("-!@!-") == -1) { var queArray = new Array(); queArray =pipeSplitedArray[i].split("-@!@-"); if(document.getElementsByName(queArray[0])) document.getElementsByName(queArray[0]).item(0).innerHTML=queArray[1]; } } } 

值传递onPageFinished加载..

  private class WebChromeClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } public void onPageFinished(WebView view, String url) { String script = "javascript:function myFunction(var_) { var pipeSplitedArray = var_.split(\"\\|\\|\"); for(var i=0; i<pipeSplitedArray.length-1; i++) { if(pipeSplitedArray[i].indexOf(\"-!@!-\") == -1) { var queArray = new Array(); queArray =pipeSplitedArray[i].split(\"-@!@-\"); if(document.getElementsByName(queArray[0])) document.getElementsByName(queArray[0]).item(0).innerHTML=queArray[1]; } } }"; view.loadUrl(script); view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction("+answerString+"));"); } } 

在webView中加载的HTML内容,questionsArray [questionIndex]是

 <div class="newmain5 norma12" style="position:relative;width:320px;"> Enter your name :</div> <div class="newmain6" style="position:relative;width:275px;left:10px;"> <textarea name="69_206" id="1" rows="5" cols="30" style="font-family:Arial, Helvetica, sans-serif; font-size:12px; color:#666666; width:260px; border:1px solid #CCCCCC; background-color:#EBEBEB;" /> </textarea> </div> 

传递给onPageFinished的string:

 69_206-@!@-MyName|| 

运行我的应用程序时,我得到所有的错误是

 11-23 14:46:59.786: I/chromium(2763): [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected token ILLEGAL", source: (1) 

我试图在w3schools Tryit编辑器中运行脚本,脚本成功执行,但从来没有在Android应用程序..什么是我的错误? 会很好,如果你能帮助!

提前致谢..

Solutions Collecting From Web of "Android webview“未捕获的SyntaxError:意外的令牌非法”"

发现错误。 您需要将string值作为parameter passing时引号。

错误

 view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction("+answerString+"));"); 

正确

 view.loadUrl("javascript:window.HtmlViewer.injectIntoWebView(myFunction('"+answerString+"'));"); 

值应该在引号中,检查myFunction('69_206-@!@-MyName||')

检查你的JavaScript文件

如果你在if语句中有关系运算符的错误语法。

change => to >= and =< to <=

 $('#search').bind('keydown', function() { tmp = Number(event.keyCode); if ((tmp <= "48" && tmp >= "90") || (tmp <= "96" && tmp >= "111") || (tmp <= "186" && tmp >= "222")) { showSearching(); } });​ 

其他检查你的代码:

如果你需要确保string不只是一堆空的空间(我假设这是表单validation),你需要做的空间replace。

 str.replace(/-!!!-/g,"")