安卓Webview出现“Uncaught SyntaxError:Unexpected token ILLEGAL”错误

8

在我的Android程序中,我有一个Webview,并需要动态地设置Webview元素(文本区域、复选框等)的值。我有一个JavaScript方法,它从程序接收值并执行字符串操作,并将值存储到正确的元素中。但我总是得到这个错误……有点卡住了。任何帮助都将不胜感激。

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

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

我在webView中设置文本区域值的Javascript方法

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中传递的字符串:

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应用程序中却从未执行过。我犯了什么错误吗?如果您能帮忙解决问题就太好了!谢谢。

我刚刚删除了那行代码,替换操作将在程序本身中执行。结果将是69_206-@!@-MyName||。同样的错误!! - Arun Jose
我的名字是文本框中的文本! - Arun Jose
1
检查你的分割方法。 - codercat
1
嗨,请使用以下代码替换变量:var_.replace(/-!!!-/g,"") - codercat
@iDev请检查编辑后的代码... 错误 - "Uncaught SyntaxError: Unexpected string"已被删除。 但当前的错误是“Uncaught SyntaxError: Unexpected token ILLEGAL” :O :| 有什么建议吗??? - Arun Jose
显示剩余10条评论
2个回答

16

找到错误了。在将字符串值作为参数传递时,您需要用引号将其括起来。

错误示例

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

正确

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

值应该用引号括起来,检查myFunction('69_206-@!@-MyName||')


1

检查你的JavaScript文件

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

=>改为>=,将=<改为<=

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

请检查您的代码:

如果您需要确保字符串不仅是一堆空格(我假设这是用于表单验证),则需要对空格进行替换。

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

1
不,我的Javascript方法没有指定的运算符!!上面提供了Javascript代码! :| - Arun Jose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接