【问题标题】:Android webview "Uncaught SyntaxError: Unexpected token ILLEGAL"Android webview“未捕获的语法错误:意外令牌非法”
【发布时间】:2013-11-23 07:36:22
【问题描述】:

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

我在 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 上传递的字符串:

69_206-@!@-MyName||

我在运行我的应用程序时遇到的错误是

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

我尝试在 w3schools Tryit Editor 中运行脚本并且脚本已成功执行,但从未在 android 应用程序中运行。我的错误是什么?如果你能帮忙就太好了!!

提前谢谢..

【问题讨论】:

  • 用javascript替换字符串需要什么。
  • str.replace("/-!!!-/","") 检查这个
  • 你想替换什么为空或null
  • 检查你的分割方法
  • 嗨,请用这个替换 var_.replace(/-!!!-/g,"")

标签: javascript android webview


【解决方案1】:

发现错误。作为参数传递时,您需要将字符串值放在引号中。

错误

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

正确

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

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

【讨论】:

    【解决方案2】:

    检查您的 JavaScript 文件

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

    更改=&gt; to &gt;= and =&lt; to &lt;=

    $('#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,"")
    

    【讨论】:

    • 不,我的 Javascript 方法没有指定的运算符!!上面提供了Javascript代码! :|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2012-10-18
    • 1970-01-01
    • 2014-02-09
    • 2011-04-07
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多