无法使javascript innerHtml在WebView上工作

无法使javascript innerHtml在WebView上工作,javascript,android,Javascript,Android,我使用的是带有javaScript界面的WebView。如果勾选了一些复选框,我只想更改span的内部html 下面是我在strings.xml中的字符串片段。表单将在提交时调用此函数,如果未通过,则不应继续。问题是我无法让innerHtml工作(每次都返回true) 这很有效 <script type=\"text/javascript\" language=\"javascript\"> function pass() { return javaInter

我使用的是带有javaScript界面的WebView。如果勾选了一些复选框,我只想更改span的内部html

下面是我在strings.xml中的字符串片段。表单将在提交时调用此函数,如果未通过,则不应继续。问题是我无法让innerHtml工作(每次都返回true)

这很有效

<script type=\"text/javascript\" language=\"javascript\">
    function pass() {
        return javaInterface.checkboxPass();
        /*
        if(passed) {
            //change the instructions
            document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
        }

        return passed;
        */
    }
</script>

函数传递(){
返回javaInterface.checkboxPass();
/*
如果(通过){
//更改说明
document.getElementById(\“txtInstructions\”).innerHTML=\'Loading Website…\';
}
返回通过;
*/
}
每次都是这样

<script type=\"text/javascript\" language=\"javascript\">
    function pass() {
        var passed= javaInterface.checkboxPass();

        if(passed) {
            //change the instructions
            document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
        }

        return passed;

    }
</script>

函数传递(){
var passed=javaInterface.checkboxPass();
如果(通过){
//更改说明
document.getElementById(\“txtInstructions\”).innerHTML=\'Loading Website…\';
}
返回通过;
}
这是文档正文中的跨度

<span id=\"txtInstructions\">%1$s</span>
%1$s

我做错了什么?

我不知道为什么代码的行为与您希望的不一样,但我可以告诉您,您试图以一种过于复杂的方式来做这件事。将JavaScript和HTML存储在XML文件中似乎是一个真正的坏主意。我猜这是合法的JavaScript,但将变量命名为与其父函数相同的变量似乎是错误的,一般来说,您不应该使用这样的范围微妙之处,它除了混淆之外没有任何好处。

我仍然认为您的方法返回的不是严格意义上的布尔值。我会尝试这样做:

<script type="text/javascript" language="javascript">
function pass() {
    var passed= javaInterface.checkboxPass();

    if(JSON.parse(passed)) {
        //change the instructions
        document.getElementById(\"txtInstructions\").innerHTML = \'Loading Website...\';
    }

    return passed;

}
</script>

函数传递(){
var passed=javaInterface.checkboxPass();
if(JSON.parse(已传递)){
//更改说明
document.getElementById(\“txtInstructions\”).innerHTML=\'Loading Website…\';
}
返回通过;
}
这将排除“布尔值”被括在引号或其他蹩脚的东西中的可能性。如果这确实是一个Java接口,那么它可能正在将布尔值转换为字符串

我不认为布尔值可以作为真正的布尔值传递,特别是因为javascript和java在后台的工作方式不同。您可以使用eval,但这不是一个好的实践,因为如果它是一个函数,它将运行它

IE没有解析函数,因此您必须使用:


有什么理由要反斜杠转义引号字符吗?否则这不是标准的HTML/javascript。checkboxPass的代码是什么?如果它返回一个对象或字符串,
If(pass)
将始终计算为true。例如,据我所知,
if(“false”)
将计算为true。只有当checkboxPass返回false、null或未定义时,它才会为false。@tjameson javaInterface.checkboxPass()返回boolean@slebetman因为它存储在XML字符串文件中,所以这仍然是一个活跃的问题吗?我将变量名更改为passed,但仍然存在相同的问题。我必须查看代码的更完整视图,最好我希望看到它托管在服务器上。